Вопрос

Я не думаю, что на мой вопрос здесь уже ответил. Итак, вот оно, у меня есть статическая библиотека, которую я периодически поддерживаю и обновляю. Я также правильно обновляю номер версии. Теперь мое приложение, которое использует эту библиотеку, должно ссылаться на той же версию библиотеки, а не к более старым или более новым. Одна вещь, которую я попробовал, - это использовать предопределенные макросы в файле заголовка библиотек и проверить их в моем приложении. Это сработало, но таким образом вы можете обеспечить только правильные файлы заголовков. Есть ли какая -либо техника, чтобы ссылка потерпела неудачу, если это неправильная библиотека ?? Я надеюсь, что вопрос несколько ясен.

Хари

Это было полезно?

Решение

Я не уверен, что я рекомендую это, но ...

Заголовок может включать в себя:

#define LIB_VERSION_SUFFIX _3_17

#define LIB_PASTER(x, y)    x ## y
#define LIB_EVALUATOR(x, y) LIB_PASTER(x, y)
#define LIB_FUNCTION(x)     LIB_EVALUATOR(x, LIB_VERSION_SUFFIX)

#define lib_functionA LIB_FUNCTION(lib_functionA)

extern int lib_functionA(const char *, int);

И т.п.

Пользователь кода записывается в терминах некорректных имен функций (LIB_FUNCTIONA), в то время как заголовок гарантирует, что прилагается правильная версия суффикса.

Вам не обязательно нужно изменять каждую функцию; Вам нужно убедиться, что некоторая функция, которая всегда будет использоваться, украшена номером версии. Если есть функция инициализации (lib_init(), возможно,), затем используйте это. Вы можете сделать это с переменной; Трудная часть тогда обеспечивает упоминание переменной в каждой программе.

Обратите внимание, что это более обычно, чтобы гарантировать, что интерфейс для библиотеки остается неизменным в разных версиях, чтобы программы могли быть связаны с любой версией без необходимости компиляции.

Другие советы

Все, что вам нужно, это уникальный символ, связанный с номером версии, например:

int version_1_1_5=0;

В библиотеке и некоторое его использование в приложении, например:

extern int version_1_1_5; //decl
int *p = &version_1_1_5;  // use
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top