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. 动态库合入静态库
无法实现