Ссылка на правильную библиотеку - PullRequest
3 голосов
/ 20 декабря 2010

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

Хари

Ответы [ 2 ]

2 голосов
/ 20 декабря 2010

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

int version_1_1_5=0;

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

extern int version_1_1_5; //decl
int *p = &version_1_1_5;  // use
0 голосов
/ 20 декабря 2010

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

Заголовок может содержать:

#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);

Etc.

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

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

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

...