链接到正确的库

时间:2010-12-20 07:34:44

标签: c++ linker predefined-macro

我不认为我的问题已在这里得到解答。所以在这里,       我有一个静态库,我维护和定期更新。我还正确更新了版本号。现在我的应用程序使用这个库必须链接到完全相同的库版本,而不是旧的或更新的。我试过的一件事是在库头文件中使用预定义的宏,并在我的应用程序中检查它。它工作,但以这种方式,您只能确保正确的头文件。          是否有任何技术,如果它是错误的库,链接将失败?我希望这个问题有点清楚。

2 个答案:

答案 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()),那么使用它。你可以做一个变量;然后,困难的部分是确保在每个程序中引用变量。

请注意,更常见的是确保库的接口在不同版本中保持不变,以便程序可以与任何版本链接而无需编译。