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参数中限制自己对外暴露的符号,这些暴露的符号一定要包含自己希望暴露给外部的接口,否则外界就无法访问到对应的地址了

  • 相关阅读:
    rocketmq的broker如何同步信息的?
    SO_LINGER 选项
    哈哈哈
    NAG博客目录
    事后分析$eta$
    项目展示$eta$
    测试报告$eta$
    发布声明$eta$
    Scrum meeting 10
    技术博客6--Django实现列表分页
  • 原文地址:https://www.cnblogs.com/gangmiangongjue/p/7656601.html
Copyright © 2011-2022 走看看