从静态库编译动态库符号导出问题

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:

猜你喜欢

转载自blog.csdn.net/beebeeyoung/article/details/112256563
今日推荐