关于libc++_shared.so 与libstdc++、libc++的链接关系

问题点1:  -lstdc++ libc++_shared.so的关联;

当在makefile中引入-lstdc++时,其意味着调用动态库libstdc++.so,

Note动态库libstdc++.so 所对应的静态库是libstdc++.a;

Note:当前测试libstdc++.so来自于Android12./prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8/x86_64-linux/lib64文件夹

 使用指令objdump -x libstdc++.so |grep NEEDED看到其并没有直接引用libc++_shared.so

测试(测试工具链为android-ndk-r25b):

Case 1):自定义ABC.so的makefile中添加-lstdc++,即调用libstdc++.so,

compile出ABC.so 后,使用“objdump -x libABC.so |grep NEEDED”,可以看到其需链接

libc++_shared.so

Case 2):自定义ABC.so的makefile中通过-Xlinker "-(" -lstdc++ -Xlinker "-)"形式,即调用libstdc++.a, compile出ABC.so 后,使用“objdump -x libABC.so |grep NEEDED”,可以看到其同样需链接libc++_shared.so

小结:不论调用libstdc++.so 还是libstdc++.a,compile出的自定义so都需链接

libc++_shared.so(测试结果基于Android12);

 

问题点2-lc++ libc++_shared.so的关联;

当在makefile中引入-lc++时,其意味着调用动态库libc++.so,

Note动态库libc++.so 所对应的静态库是libc++_static.a;

libc++.solibc++_static.a来自于Android12

其中libc++_static.a具体来自于./prebuilts/ndk/current/sources/cxx-stl/llvm-libc++/libs/文件夹下

测试(测试工具链为android-ndk-r25b):

Case 3):自定义ABC.so的makefile中添加-lc++,即调用libc++.so,

compile出ABC.so 后,使用“objdump -x libABC.so |grep NEEDED”,可以看到其需链接

libc++_shared.so

Case 4):自定义ABC.so的makefile中通过-Xlinker "-(" -lc++_static -Xlinker "-)"形式,即调用libc++_static.a, compile出ABC.so 后,使用“objdump -x libABC.so |grep NEEDED”,可以看到其不需链接libc++_shared.so

结论:以上4种测试case中,唯一不需链接libc++_shared.so的只有libc++_static.a

且在Android12 源码中,也能找到其为了避开libc++_shared.so而使用

libc++_static.a的例子;

’如:./package/modules/NetworkStack/Android.bp中,

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值