最近在研究library版本依赖的问题:
假如 Library A 和B 编译的时候依赖 Library C,而A/B编译的时间各不相同,
所以它们编译时所链接的C的版本不一样,这样,当有一个程序同时链接 library A/B/C
的时候,就会运行异常
我想到一个解决方案,如果有方法在library C的头文件中声明一个特殊的变量或者函数,
这个变量必须被引用者实现或者调用,那么就可以强迫在链接期发现库文件版本不一致的情况了
比如:
c.h
#define VER 1
void specialFunction_Version_VER();
c.cpp
void specialFunction_Version_VER() {}
nm libraryC.a
T specialFunction_Version_1
a.cpp
#include c.h
void auto_call() { specialFunction_Version_VER(); }
nm libraryA.a
U specialFunction_Version_1
如果升级了 c.h 中的 ver,那么会导致老libraryA中的引用失效,使得编译期报错,
及时发现隐患
现在主要问题是,auto_call里面的函数列表是人工维护的,如果依赖的库多了,维护不方便,
有无办法让 auto_call中的调用是自动的?