如何选择正确的ANDROID_EABI?

时间:2014-11-25 23:49:28

标签: android android-ndk

我正在Ubuntu上为Android构建libopenssl。我注意到其中一个步骤是定义以下两个术语:

_ANDROID_API="android-16"
_ANDROID_EABI="arm-linux-androideabi-4.6"

值" android-16" for _ANDROID_API是有意义的,因为它对应于我们支持的最低级别的Android 4.1版。

但是,我对为_ANDROID_EABI选择正确的值感到困惑。如果我查看$ ANDROID_NDK_ROOT / toolchains,我看到我有arm-linux-androideabi-4.6,arm-linux-androideabi-4.8和arm-linux-androideabi-4.9可用。我如何决定哪一个适合我? android_eabi版本与我们支持的最低Android版本之间是否存在任何关系?

此外,我正在构建的其他一些库不需要指定任何_ANDROID_EABI。如果他们自动选择EABI,当所有库链接到单个.so文件时会出现问题吗?问候。

1 个答案:

答案 0 :(得分:4)

首先,这些openssl构建脚本中使用的命名令人困惑。你没有选择“EABI版本”(EABI是目前在ARM上使用的ABI的名称),你选择了一个工具链版本(openssl构建脚本称之为“EABI工具的版本”,即使它可以是像x86这样的非EABI工具链。

使用的工具链版本与支持的最低Android版本之间没有任何关系。

要自己决定使用哪个工具链,请在任何其他情况下选择编译器版本。较新的主要版本可能(稍微)不太成熟,但可能会更好地优化。

如果库不需要您直接命名工具链,他们可能会为您选择硬编码(基于gcc 4.6的工具链已经成为NDK的一部分已经有一段时间了,而其他工具链则更新 - 更早还有基于gcc 4.4的一个),或者可以选择NDK中的默认值。

要找到NDK中的默认值,您可以执行以下操作:

NDK_PROJECT_PATH=<ndk>/samples/hello-jni <ndk>/ndk-build DUMP_TOOLCHAIN_PREFIX APP_ABI=armeabi

(您可以指向任何带有路径的NDK项目,只要它不会覆盖工具链版本。而不是DUMP_TOOLCHAIN_PREFIX,您也可以使用DUMP_TOOLCHAIN_VERSION。)

另请注意,NDK已弃用现在默认的GCC 4.6工具链,并且可能会将其删除(并将默认设置更新为其中一个) - 有关此问题的一些讨论,请参阅https://groups.google.com/forum/#!topic/android-ndk/q8jchajqKIo

相关问题