首页 > 其他 > 详细

编译——so与符号

时间:2017-10-12 16:36:10      阅读:520      评论:0      收藏:0      [点我收藏+]

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

编译——so与符号

原文:http://www.cnblogs.com/gangmiangongjue/p/7656601.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!