码迷,mamicode.com
首页 > 其他好文 > 详细

NDK中的循环依赖问题及使用gold解决

时间:2020-06-28 20:30:37      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:www   bin   导致   文件   对比   str   strong   支持   link   

循环依赖问题

假设可执行程序exe1使用了so1和so2中的函数,so1使用了so2的函数。编译so1时,肯定需要指定-lso2;编译exe1时,肯定需要指定-lso1,但是exe1间接依赖了so2,是否需要指定-lso2呢?

对于常规的NDK编译来说,是需要指定的,否则会报undefined reference问题。而如果添加LOCAL_LDFLAGS += -fuse-ld=gold.exe选项,则可以解决这个问题。https://www.jianshu.com/p/21c5b79d5371文中提到使用-fuse-ld=gold会报错,而解决方式是使用-fuse-ld=gold.exe,虽然我没有遇到这个问题。在NDK中,ld.bfd.exeld.gold.exe都是有的。

gold

  • 名字由来:go+ld
  • 只能ELF格式专用,和ld一样,都属于GNU binutils
  • goal:加快link速度。相比ld要快2~10倍,同时更少的内存消耗。为什么会比ld快呢?因为ld使用了BFD库以支持不同的文件格式,有更多的抽象层。而gold则直接针对ELF格式设计,所以有更快的速度。对比而讲,LLVM的lld是最快的,比gold更快
  • https://blog.csdn.net/ayu_ag/article/details/78552801:这篇文章里讲的dt-needed的问题问题,在我的测试时不行,会报错说不支持这样的选项;同时其讲的循环依赖问题,从我这里来看是刚好相反的,即gold不会去解决循环依赖的符号。第四点,使用gold导致dlopen变慢的问题,还没有验证。

NDK中的循环依赖问题及使用gold解决

标签:www   bin   导致   文件   对比   str   strong   支持   link   

原文地址:https://www.cnblogs.com/willhua/p/13204508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!