问题描述:
1、编译了一个lib1.a 
2、然后又写了一个函数封装,其中依赖lib1.a的函数,又编译成一个  lib2.a 
3、编写一个程序A,使用了 lib2.a 的封装函数。  采用静态链接编译程序。现在发现这样一个问题,修改了lib1.a 中的函数接口,比如新增了某个类中的函数接口,重新编译lib1.a ;然后重新编译 程序A;
会发现  程序A 有时候正常,有时候会出现异常崩溃;如果出现异常崩溃的话,只需要 重编一下 lib2.a ,在重编程序A,就正常了;麻烦大神解释一下是什么情况,静态链接向下依赖的情况下,如果最底层的 .a 发生了改变,一定要把上层的所有 .a 进行重编,才能保证程序正常吗???

解决方案 »

  1.   

    你自己不是解释了吗。既然是静态编译。2lib就任务1是不变的,你1既然修改了,函数入口地址就是不定的,不变,当然没问题,变量你就得重新编译。写个makefile就搞定了。
      

  2.   

    贴一下Makefile?
      

  3.   

    把你的Makefile贴出来看看
      

  4.   

    编译参数加上 -fPIC 再试试。
    动态库一定要加-fPIC。
    静态库可选可不选,按照这个场景,可以加上-fPIC参数试试。