LINUX程序编译的问题

qq_28889873 2018-07-18 08:18:05
问题描述:
1、编译了一个lib1.a
2、然后又写了一个函数封装,其中依赖lib1.a的函数,又编译成一个 lib2.a
3、编写一个程序A,使用了 lib2.a 的封装函数。 采用静态链接编译程序。

现在发现这样一个问题,修改了lib1.a 中的函数接口,比如新增了某个类中的函数接口,重新编译lib1.a ;然后重新编译 程序A;
会发现 程序A 有时候正常,有时候会出现异常崩溃;如果出现异常崩溃的话,只需要 重编一下 lib2.a ,在重编程序A,就正常了;

麻烦大神解释一下是什么情况,静态链接向下依赖的情况下,如果最底层的 .a 发生了改变,一定要把上层的所有 .a 进行重编,才能保证程序正常吗???
...全文
455 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
幽饮烛 2018-07-31
  • 打赏
  • 举报
回复
编译参数加上 -fPIC 再试试。
动态库一定要加-fPIC。
静态库可选可不选,按照这个场景,可以加上-fPIC参数试试。
comeon2010 2018-07-30
  • 打赏
  • 举报
回复
你这种实现,应该使用动态库编译才可以的。使用.a的静态库,这个肯定要出错的。
明月爱清风 2018-07-26
  • 打赏
  • 举报
回复
把你的Makefile贴出来看看
Johnblx 2018-07-24
  • 打赏
  • 举报
回复
贴一下Makefile?
文虫并雕 2018-07-23
  • 打赏
  • 举报
回复
你自己不是解释了吗。既然是静态编译。2lib就任务1是不变的,你1既然修改了,函数入口地址就是不定的,不变,当然没问题,变量你就得重新编译。写个makefile就搞定了。
duoshikongbai 2018-07-23
  • 打赏
  • 举报
回复
这个问题,你可以看一下静态库和动态库编译的区别及加载形式!

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧