ar crvs liba.a liba1.a liba2.a
gcc -shared -o liban.so an.c liba.a
一般情况下,只有动态库中使用到的符号,才会从静态库导出,导出的是包含该符号的整个目标文件。
如何解决静态库中符号无法导出的问题:
1)在动态库中调用
2)将静态库提取出所有目标文件,然后编译动态库
3)连接选项,控制全部导出 -Wl,--whole-archive -Wl,--no-whole-archive 选项之间的静态库符号全部导出。
实例:
源文件 a1.c、a2.c、an.c、an_call.c 如下,构成:目标文件a1.o、a2.o; 静态库文件 liba.a; 动态库文件 liban.so、liban_call.so、liban_opt.so;
a1.c:
a2.c:
an.c:
an_call.c:
a1.o、a2.o:
liba.a:
liban.so:
liban_call.so:
liban_opt.so: