关于NDK中so库的加载问题

kkled 2016-12-23 10:32:55
我们项目组的Android开发会涉及ndk,要加载一些so库。我主要负责提供给他们这个so库,要得到so库是要进行编译的。
我有一个问题。就是比如我要编译给他们一个A.so这么一个库,在写编译脚本.mk文件的时候,发现里面同时还有b.so,c.so,d.so等动态库。编译完之后我把A.so给Android组,可是发现Android的代码里面除了会system.loadlibrary("A"),还会把加载b,c,d,等so库。这是为什么呢?不是b.so,c.so和d.so都存在于A.so这个动态库了吗?既然A.so已经被加载了,为什么还要加载b,c,d呢?
...全文
242 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shmiloveyou 2017-03-12
  • 打赏
  • 举报
回复
A.so依赖B.so和C.so,A、B、C三个都是动态链接库文件。A.so文件中会记录依赖的.so库文件的信息(依赖库文件的相对路径、库文件名、库文件的适用CPU架构等等)。只需要这些记录这些依赖库的相关信息,在动态加载A.so时会去查找其依赖的B.so/C.so是否存在,如果不存在则加载失败。 A.so中完全没有必要将B.so/C.so编译到一起,这样会让A.so变很庞大(试想:如果B.so/C.so也依赖其它的库,如此链式传递下去,这个A.so会变得巨大无比)。从.so动态链接库的设计思想(动态加载、库文件共享、模块化、解耦合、保持接口不变易于替换升级)上看是完全背离的。
八戒悟能 2016-12-23
  • 打赏
  • 举报
回复
动态库应该是不会打进去的吧,它应该是动态加载的吧

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧