我正在尝试建立库对于 Android,使用 CMake 和嵌入在 NDK 中的工具链。
我的系统是MacOS 10.14.3
我刚刚下载了最新的 NDK [r20],但问题已经在 r19c 中出现了。
当 CMake 尝试编译“简单测试程序”时,它失败并显示:
ld: unknown option: --sysroot=/Users/me/android-ndk-r20/platforms/android-28/arch-arm
我尝试编译另一个库(自定义)来确认它是工具链问题,但出现了同样的错误。
在--help
编译器的输出中(来自嵌入式工具链),我发现了这个:
-isysroot <dir> Set the system root directory (usually /)
--sysroot
MacOS 的 NDK 工具链传递参数而不是参数是否存在问题-isysroot
?
有解决方法吗?(比如在 CMake 工具链文件中添加一些内容?)
这是我的 CMake 工具链文件:
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 28) # API level
set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a)
set(CMAKE_ANDROID_ARM_MODE ON)
set(CMAKE_ANDROID_NDK /Users/me/android-ndk-r20)
set(CMAKE_ANDROID_STL_TYPE c++_static)
同时,我将通过 Ubuntu docker 镜像运行它并查看其运行情况。
答案1
我在 OSX 上遇到了同样的问题,最终恢复到 NDK 18b 版本,它满足了我的需求。
NDK Rev 19c 上也有同样的问题。我认为 r19c 和 r20 上的 NDK 存在问题
答案2
需要指定工具链:
-DCMAKE_TOOLCHAIN_FILE=${HOME}/Android/Sdk/ndk-bundle/build/cmake/android.toolchain.cmake
Android Gradle 插件使用此参数调用 CMake,不会出现错误。请参阅NDK 的 CMake 页面