Я собираю библиотеки Linux (для Android, используя NDK g++, но я уверен, что мой вопрос имеет смысл для любой системы Linux). При доставке этих библиотек партнерам мне нужно отметить их номером версии. Я также должен иметь доступ к номер версии программно (чтобы показать его в диалоговом окне "О программе" или в функции GetVersion
).
Сначала я скомпилировал библиотеки с неверсированным флагом (версия 0.0
) и вам нужно изменить эту версию на реальную, когда я закончил тестирование перед отправкой его партнеру. Я знаю, что было бы легче изменить исходный код и перекомпилировать, но мы не хотим этого делать (потому что мы должны снова проверить все, если мы перекомпилируем код, мы чувствуем, что он будет меньше подвержен ошибкам, см. Комментарии к этому и, наконец, потому, что наша среда разработки работает следующим образом: мы выполняем этот процесс для двоичных файлов Windows: мы устанавливаем строку версии 0.0
ресурсов (.rc), а позже ее меняем с помощью verpatch... мы хотели бы работать с одним и тем же процессом при доставке Linux файлов).
Что было бы лучшей стратегией здесь? Подводя итог, требования следующие:
- Скомпилировать двоичные файлы с "неустановленной" версией (
0.0
или что-либо еще) - Можете изменить эту "неустановленную" версию на конкретную, не перекомпилируя двоичный файл (в идеале, запустите команду стороннего инструмента, как и при использовании verpatch в Windows)
- Уметь иметь код библиотеки для получения информации о версии во время выполнения
Если ваш ответ "переименовать .so", то просьба предоставить решение для 3.: как получить имя версии (например, имя файла) во время выполнения.
Я думал о некоторых решениях, но понятия не имел, могут ли они работать и как их достичь.
- У вас есть переменная версии (одна
string
или 3int
) в коде и есть способ изменить ее в двоичном файле позже? Использование двоичного sed...? - У вас есть переменная версии внутри ресурса и есть способ изменить ее в двоичном файле позже? (как мы это делаем для win32/win64)
- Используйте поле .so(как SONAME), посвященное этому, и у вас есть инструмент, позволяющий изменить его... и сделать его доступным из кода на С++.
- Переименуйте lib + change SONAME (не нашли, как это может быть достигнуто)... и найдите способ получить его из кода на С++.
- ...
Обратите внимание, что мы используем QtCreator для компиляции файлов Android.so, но они не могут полагаться на Qt. Поэтому использование ресурсов Qt не является идеальным решением.