Android的.so文件ABI和CPU的关系

.so文件重要法则

处理.so文件时有一条简单却并不知名的重要法则。

你应该尽可能的提供专为每个ABI优化过的.so文件,你不应该混合着使用(不能就装对不同cpu架构的so文件,放在同一个ABI目录下)。你应该为每个ABI目录提供对应的.so文件。

NDK兼容性

使用NDK时,你可能会倾向于使用最新的编译平台,但事实上这是错误的,因为NDK平台不是后向兼容(兼容过去的版本)的,而是前向兼容(兼容将来的版本)的。推荐使用app的minSdkVersion对应的编译平台。

这也意味着当你引入一个预编译好的.so文件时,你需要检查它被编译所用的平台版本。

混合使用不同C++运行时编译的.so文件

.so文件可以依赖于不同的C++运行时,静态编译或者动态加载。 
混合使用不同版本的C++运行时可能导致很多奇怪的crash,是应该避免的。

一个经验法则

  • 当只有一个.so文件时,静态编译C++运行时是没问题的,
  • 当存在多个.so文件时,应该让所有的.so文件都动态链接相同的C++运行时。
  • 这意味着当引入一个新的预编译.so文件,而且项目中还存在其他的.so文件时,我们需要首先确认新引入的.so文件使用的C++运行时是否和已经存在的.so文件一致。

猜你喜欢

转载自blog.csdn.net/Keepsty/article/details/81391766
今日推荐