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

Posted willhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NDK中的循环依赖问题及使用gold解决相关的知识,希望对你有一定的参考价值。

循环依赖问题

假设可执行程序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解决的主要内容,如果未能解决你的问题,请参考以下文章

Spring中的循环依赖及解决

从另一个提供循环依赖的模块打开活动

NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法(代码片段

c#node struct自定义LinkedListNode结构中的循环依赖

Spring循环依赖原因及如何解决

循环依赖问题及解决