linux下静态链接库包含静态链接库的问题。
请问,静态链接库可以包含静态链接库么?
有人说静态库不可以包含,有人说可以包含(但是都没有给出答案)。到底能不能阿?
windows下我用过,是可以的(就是在工程设置中添加好依赖的静态链接库就可以了)。
linux下就做不了了? 有没有高人指点一下?
谢谢
举例:
有一个静态库 libxxx.a
现在我想做一个静态库libyyy.a, 希望这个libyyy.a能包含libxxx.a。
那么我在生成 可执行程序test 的时候, 就不需要 libxxx.a了。
(前几天问过这个问题,但是解决方法后来研究了一下,发现不太对
http://topic.csdn.net/u/20100402/12/99d14afd-27a6-4adb-9131-209506577196.html
因为g++默认包含-lm -lstdc++等库)。
[解决办法]
静态库文件就是一系列.o目标文件的集合。我目前没发现两个库相互包含的命令工具。
但是可以通过以下方法解决:
1. 通过共享库.so解决,显然不是你的要求。
2. 通过使用GNU工具抽取某个库中的.o文件(譬如sin函数所在.o文件),然后再结合自己的.o文件做新库解决,但是库中的.o(譬如sin函数所在的.o)在有过多相互依赖的情况下,就需要提取所有的有依赖的.o文件,有点麻烦。
3. 通过以下方法,这是我介绍的重点:
譬如有文件: t1.c t2.c main.c
t1.c:
void f1()
{}
t2.c:
void f2()
{
f1();
}
main.c:
int main()
{
f2();
}
那么可以使用以下步骤:
gcc -c t1.c t2.c
ar rcs libt1.a t1.o
ld -o t.ao -r t2.o libt1.a
ar rcs libt.a t.ao
gcc -o main main.c -L. -lt
OK
以上的过程就是模拟1个静态库libt1.a和1个t2.o文件合并成t.ao文件的过程,t.ao文件又打包成库,供其他程序使用。