我正在Ubuntu上为Android构建libopenssl。我注意到其中一个步骤是定义以下两个术语:
_ANDROID_API="android-16"
_ANDROID_EABI="arm-linux-androideabi-4.6"_ANDROID_API的值“Androd-16”是有意义的,因为它对应于我们支持的最低级别AndroidVersion4.1。
但是,我对为_ANDROID_EABI选择正确的值感到困惑。如果我在$ANDROID_NDK_ROOT/toolchains下面查看,我看到了手臂-linux-androideabi-4.6,arm-linux-androideabi-4.8,和arm androideabi-4.9。我该如何决定哪一个是适合我的?android_eabi版本和我们支持的最低版本安卓之间有什么关系吗?
另外,我正在构建的一些其他库不需要指定任何_ANDROID_EABI。如果他们以自动方式选择EABI,那么当所有库都链接到一个.so文件中时,会不会出现问题呢?致以问候。
发布于 2014-11-26 07:17:19
首先,在这些openssl构建脚本中使用的命名是令人困惑的。您不选择"EABI版本“(EABI是当前在ARM上使用的ABI的名称),而是选择一个工具链版本( openssl构建脚本将其称为”EABI工具的版本“,尽管它可以是一个非EABI工具链,比如x86)。
所使用的工具链版本与支持的最低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。
https://stackoverflow.com/questions/27138943
复制相似问题