У меня есть библиотека API linux, которую я распространяю как для конечных пользователей, так и для серверов. Когда пользователь должен использовать эту библиотеку, они компилируют и строят .so-файл, который они отправляют на наши серверы для запуска. Я хотел бы, чтобы компилировать в номере версии библиотеки в свой .so-файл, чтобы мой сервер мог проверить, какую версию они скомпилировали. Таким образом, если сервер несовместим с .so-файлом пользователя, я могу отказаться от загрузки библиотеки. Я не уверен, какие варианты мне даже нужно достичь, и надеялся на любые предложения. Пожалуйста, дайте мне знать, если какая-либо информация будет полезной при решении этой проблемы.Составление версии библиотеки в .so-файл
0
A
ответ
0
Обычно для библиотек есть функция getLibraryVersion
, которая возвращает некоторое постоянное значение, будь то строка, целое число или что-то еще. Это даст вам версию, с которой вы связаны (например, ваша версия .so
). У вас может быть дополнительный макрос, чтобы получить скомпилированную версию (например, версию вашего сервера).
Например, API SDL имеет в версии структура и следующую функцию, определенную в одном из своих заголовков:
#define SDL_MAJOR_VERSION 1
#define SDL_MINOR_VERSION 2
#define SDL_PATCHLEVEL 15
typedef struct SDL_version {
Uint8 major;
Uint8 minor;
Uint8 patch;
} SDL_version;
/**
* This macro can be used to fill a version structure with the compile-time
* version of the SDL library.
*/
#define SDL_VERSION(X) \
{ \
(X)->major = SDL_MAJOR_VERSION; \
(X)->minor = SDL_MINOR_VERSION; \
(X)->patch = SDL_PATCHLEVEL; \
}
/**
* Use this function to get the version of SDL that is linked against
* your program.
*/
extern void SDL_GetVersion(SDL_version* ver);
В одном из ваших .so
«ы .c
файлов:
void SDL_GetVersion(SDL_version* ver)
{
SDL_VERSION(ver);
}
Пример использования :
SDL_version compiled;
SDL_version linked;
SDL_VERSION(&compiled);
SDL_GetVersion(&linked);
printf("We compiled against SDL version %d.%d.%d ...\n",
compiled.major, compiled.minor, compiled.patch);
printf("We are linking against SDL version %d.%d.%d.\n",
linked.major, linked.minor, linked.patch);
На боковой ноте; немного опасно запускать чужой код на ваших серверах.
Смежные вопросы
- 1. Составление и обновление до версии JDK 1.7
- 2. Составление частичных геттеров с использованием библиотеки объективов
- 3. Составление LIVE555 библиотеки для IOS симулятор
- 4. Составление списка: составление списков списков
- 5. версии стандартной библиотеки C++
- 6. различные версии разделяемой библиотеки
- 7. Python версии и библиотеки
- 8. mpicxx: Несовместимые версии библиотеки
- 9. Комментарий к версии библиотеки библиотеки SharePoint 2010
- 10. Динамическое составление списка в Haskell
- 11. Использование библиотеки dll версии boost
- 12. Определение версии v7 AppCompat библиотеки
- 13. создание статической версии библиотеки QT
- 14. Извлечение версии библиотеки Excel Programmatically
- 15. Составление итераторы
- 16. Многие банки библиотеки версии compatibiity
- 17. Составление подпроектов в sbt
- 18. Составление текста в AngularJS
- 19. Составление перечислений в перечислителе
- 20. Составление sqlite3 в C++
- 21. Составление изображения в C#
- 22. Составление списка в объекте
- 23. Создание уменьшенной версии библиотеки jQuery
- 24. Версии программ в зависимости от библиотеки
- 25. номер версии библиотеки DLL в .NET
- 26. Различия в версии библиотеки между linux distros
- 27. Maven: разные версии библиотеки в одном JVM
- 28. Создания библиотеки скриптов в SoapUI бесплатной версии
- 29. Составление x264 проекта
- 30. Составление содержания по горизонтали
Я согласен, мы используем некоторые linux-тюремные заключения и изучаем контейнеры и другие возможные варианты. Но если библиотека имеет эту функцию, как это будет фильтроваться в код пользователя? Когда мой сервер вызывает getLibraryVersion, он просто проверяет собственную версию на сервере, а не версию, с которой был скомпилирован .so? или я не понимаю –
Я обновил свой ответ на примере. Я не совсем уверен, как вы используете .so, который доставляется на ваш сервер, поэтому вам, возможно, потребуется уточнить, что, если это не сработает для вас :) – Julian
Я смотрю ваш код теперь, большое вам спасибо за помощь до сих пор. –