zoukankan      html  css  js  c++  java
  • 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变慢的问题,还没有验证。
  • 相关阅读:
    制作OSGB数据索引
    汤臣一品
    Python 库/模块的安装、查看
    ezdxf包下autocad的开发
    python3.7安装pylint
    航拍全景图补天
    电脑百科
    使用Excel批量提取文件名
    利用爬虫实现网上的图片自动下载
    MarkDown&思维导图
  • 原文地址:https://www.cnblogs.com/willhua/p/13204508.html
Copyright © 2011-2022 走看看