zoukankan      html  css  js  c++  java
  • 编译——so与符号

    如果你是一个sdk的开发者,那么so与符号的问题一定要清楚。

    关于符号的基本知识:
    http://blog.csdn.net/wuzoujing/article/details/56674000

    每个so都有自己的符号,所谓的函数和结构体变量之类的,其实本质上都是地址,如果一个so依赖了另外一个so,那么自己的符号信息也会写入另外一个so暴露的符号,编译时候会根据自己的符号信息去自己和依赖的so中寻找对应的符号。那么如果是一个so A自己依赖一个标准的c++库,然后被so B依赖,link时候建立了符号间的依赖,如果so A在一个另外一个编译链下依赖了另外一种c++库,这时候重新link a 和b时候,就会因为c++标准库符号的不同,可能发生一些符号找不到的问题,这是非常悲剧的。例如:

     cannot locate symbol "_ZTIN10__cxxabiv115__forced_unwindE" referenced by "/system/lib64/libMegviiUnlock.so"

    控制so库向外界暴露符号的手段是,使用ld的--version-script参数设置文件,在文件中的global参数中限制自己对外暴露的符号,这些暴露的符号一定要包含自己希望暴露给外部的接口,否则外界就无法访问到对应的地址了

  • 相关阅读:
    Fast Member
    C++箴言:理解typename的两个含义
    网上资源工具
    WeakReference
    MonoGame教程
    The RAII Programming Idiom
    OpenGL Common Mistakes
    Finalize()、Dispose()、SafeHandle、GC
    Interop with Native Libraries
    C++计算几何库
  • 原文地址:https://www.cnblogs.com/gangmiangongjue/p/7656601.html
Copyright © 2011-2022 走看看