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