我不认为我的问题已在这里得到解答。所以在这里, 我有一个静态库,我维护和定期更新。我还正确更新了版本号。现在我的应用程序使用这个库必须链接到完全相同的库版本,而不是旧的或更新的。我试过的一件事是在库头文件中使用预定义的宏,并在我的应用程序中检查它。它工作,但以这种方式,您只能确保正确的头文件。 是否有任何技术,如果它是错误的库,链接将失败?我希望这个问题有点清楚。
哈
答案 0 :(得分:2)
您只需要一个与版本号相关的唯一符号,例如:
int version_1_1_5=0;
在库中并在应用程序中使用它,例如:
extern int version_1_1_5; //decl
int *p = &version_1_1_5; // use
答案 1 :(得分:0)
我不确定我会推荐它,但是......
标题可包括:
#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()
),那么使用它。你可以做一个变量;然后,困难的部分是确保在每个程序中引用变量。
请注意,更常见的是确保库的接口在不同版本中保持不变,以便程序可以与任何版本链接而无需编译。