Hunter的大杂烩

May 30, 2007

关于库版本依赖的解决方案思考

Filed under: C++,Linux — hunter @ 3:06 pm

 

 

     最近在研究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中的调用是自动的?

 

 

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress