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

博客介绍了静态库符号导出规则,一般只有动态库中使用到的符号才会从静态库导出。同时给出解决静态库中符号无法导出的方法,包括在动态库中调用、提取目标文件编译动态库、使用连接选项控制全部导出,并给出相关实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值