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

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:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值