【问题标题】:why android ndk standalone toolchain do not support arm64 with api 19 but android ndk cmake does为什么android ndk独立工具链不支持带有api 19的arm64,但android ndk cmake却支持
【发布时间】:2018-09-17 17:52:06
【问题描述】:

我曾经构建过 api 级别 19 的 arm64-v8a 库,使用 android.toolchain.cmake 自带 Android 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"                    \
        ..

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

./make_standalone_toolchain.py --arch=arm64 --api=19 --stl=libc++ --install-dir=./test

将失败并显示错误消息:

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

有没有办法解决这个问题?

【问题讨论】:

  • api 21 有什么问题?你有使用 KitKat 的 arm64 设备吗?
  • 感谢您的帮助。不,我没有带有 KitKat 的 arm64 设备。我必须同时支持 armv7a KitKat 设备和 arm64 LOLLIPOP 设备,我想将 minSdkVersion 设置为 19。
  • 所以你需要两个独立的工具链。将 armv7a 设置为 api=19 和 arm64 设置为 api=21 应该没问题。

标签: cmake android-ndk arm64 android-api-levels conan


【解决方案1】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 2011-04-26
  • 2018-01-22
相关资源
最近更新 更多