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变慢的问题,还没有验证。
  • 相关阅读:
    [考试]20150811
    [考试]20150810
    [随笔]暑假过了,暑假来了
    [考试]20150808
    动态规划大合集II
    [知识点][旧版]C++中的运算符
    NOIP动态规划大合集
    [考试]20150729
    [考试]20150728
    /=============分隔线=============/
  • 原文地址:https://www.cnblogs.com/willhua/p/13204508.html
Copyright © 2011-2022 走看看