为什么android ndk独立工具链不支持带有api 19的arm64但android ndk cmake支持

guo*_*fei 5 cmake android-ndk arm64 android-api-levels conan

我曾经构建过 api 级别 19 的 arm64-v8a 库,使用android.toolchain.cmakeAndroid NDK r16b 就像这样。

${CMAKE} \
        -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE}                    \
        -DANDROID_NDK=$ANDROID_NDK_HOME                             \
        -DANDROID_ABI="arm64-v8a"                                   \
        -DANDROID_NATIVE_API_LEVEL="android-19"                     \
        -DANDROID_STL="c++_shared"                                  \
        -DANDROID_CPP_FEATURES="rtti exceptions"                    \
        ..
Run Code Online (Sandbox Code Playgroud)

现在我想打包我的 lib 使用conan,它交叉编译 android lib 使用独立工具链。似乎不可能用--arch arm64and制作独立的工具链--api 19,因为以下命令

./make_standalone_toolchain.py --arch=arm64 --api=19 --stl=libc++ --install-dir=./test
Run Code Online (Sandbox Code Playgroud)

将失败并显示错误消息:

19 小于 arm64 的最小平台 (21)

有没有什么办法解决这一问题?

Dan*_*ert 6

因为没有 API 19 ARM64 这样的东西。在 android-21 中添加了 64 位支持。

CMake 支持这一点,因为我们的工具链文件是根据当时常用的一个流行选项建模的,这就是它所做的。ndk-build 这样做是因为您在一次调用中构建了多个 ABI。在这两种情况下,构建都会自动将 64 位目标的 API 级别提升到 21。

独立工具链仅适用于一种架构,因此如果您指定该架构不支持的 API 级别,它们会给出错误,因为这可能是一个错误。