静态库递归引用产生的问题

由于静态库可以避免程序运行时去找动态库,所以编译的时候经常使用。

一、出问题的场景

a编译成静态库lib.a,b引用lib.a编译成静态库libb.a
这时项目c要使用b,但是直接引用libb.a和b的头文件并不能成功。
c需要同时引用a、b并且在Makefile中a必须写在b的后面。

二、具体描述说明

使用redis做二次开发。
首先将redis-3.2.6打包成静态库redis.a,
编写了一套C++的接口slibredis封装redis.a,把slibredis也打包成静态库slibredis.a,
用封装的slibredis.a写项目。

(1)本以为只需要引用自己封装的静态库即可,也就是slibredis.a和其对应的头文件;
    没想到会出错。各种"not found"

(2)没办法,只能引用redis-3.2.6的头文件;
    结果还是不行,各种"undefined reference to `_XXXXXXXX()`"

(3)没办法,只能把redis.a也引用进来。
    结果还是不行,各种"undefined reference to `_XXXXXXXX()`"

(4)后来查了资料,原来这种情况对Makefile也有要求,
    也就是在Makefile中,需要把最先引用的静态库写在后引用静态库的后面,
 也就是Makefile中需要这样写:g++ (省略n个字) /path/to/slibredis.a /path/to/redis.a
 终于成功了。

三、其他解决方案

    当然网上也说了各种添加参数,可以在封装slibredis的时候可以避免静态库递归的。不过最终还是没能成功。

 

转载于:https://www.cnblogs.com/bugutian/p/6249596.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值