linux上静态库链接的有关问题

求大神,linux下静态库链接的问题
有两个文件和一个库,a.c, b.c,libh.a,其中b.c里面会有调用libh.a的函数func1,现在将a.c, b.c,libh.a编译链接生成可执行文件,有下面几种操作方式
1、直接编译生成a.o, b.o,然后链接libh.a,没有问题,正常
2、将b.c打包成库libb.a,然后编译生成a.o,然后链接libh.a,libb.a,则a.o,libb.a, libh,a能链接通过,没有问题,正常
现在的问题是不链接libh.a,问题来了
1、直接编译生成a.o, b.o,然后链接则会报错,说FUNC1找不到
2、将b.c打包成库libb.a,然后编译生成a.o,然后链接libb.a,则有两种情况
1)如果a.c中不调用b.c中的函数,则能链接通过并生成执行文件,
2)如果a.c中有调用b.c中的函数FUNC2,同链接不能通过。
不知道三种情况下,为什么a.c中调不调libb.a中的函数会有两种不同的表现?难道不调用libb.a中的函数的时候,libb.a就不会去链接libh.a吗?求解

linux  链接  静态库


------解决方案--------------------
静态库中没有内容被引用的 .o 文件是不会参与链接的。

 

 

转自:http://www.myexception.cn/c/1170327.html

=============== Elta的分割线 ================

这个错误最近经常出现,而且让人一头雾水。找到的这个答案讲解的也很清楚了。

其实就是:如果有两个链接库,一个用到了另外一个的函数,而链接用的.o文件却没有用到这个函数,那么这个函数是不会被链接通过的。

 

转载于:https://www.cnblogs.com/elta/p/3435536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值