Makefile学习记录(三)

本文详细介绍了静态库和动态库之间的合并方法,包括如何正确地将多个静态库合并成一个静态库,并解决了在这一过程中遇到的链接错误。同时,还探讨了将静态库合并到动态库以及动态库合入静态库时可能遇到的问题及解决方案。

1. 在项目编译中想将几个静态库合并成一个静态库

尝试:

  ar  crv A.a  B.a  C.a

然后使用:

gcc -o test -lA  

ld 报错找不到B.a中包含的函数

百度一下,发现静态库的合并不能使用ar  crv A.a  B.a  C.a直接压缩

需要先将静态库解压后在合并

ar x A.a

ar x B.a

ar x C.a

ar crv  A.a *.o

ar这个压缩指令可以理解为windows的压缩工具

在你压缩一个A.rar 然后 B.rar,直接将A.rar和B.rar合并为C.rar ,C.rar包含的就是两个.rar包

而不是包中的内容,这样你需要将A.rar解压成文件,B.rar也是然后合并。

这样理解就可以知道为什么ld的时候找不到B.a的函数,因为B.a被整个合并到A.a而不是以.o的形式

所以ld无法识别



2.  静态库合并到动态库

    先前以为在生成动态库时只要将引用的静态库指定好就可以链接进动态库

    

    不过在调用so库时又出现了undefined symbol 错误

    百度了一下,需要添加强制条件:

    

    通过nm查看库文件:

 函数前都是T,表示包含,如果为U则表示未包含,还需要链接其他库


3. 动态库合入静态库

   无法实现











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值