使用CMake、Android NDK与sdkmanager编译C库时构建失败求助
使用CMake、Android NDK与sdkmanager编译C库时构建失败求助
我最近尝试在Ubuntu环境下为Android armeabi-v7a架构编译一个C库,当前的环境配置如下:
- Ubuntu系统
- CMake 3.22版本
- Android cmdline-tools 10406996_latest
我通过sdkmanager安装了以下组件:
- build-tools 34.0.0
- platforms android-34
- platform-tools
- ndk 26.1.10909125
所有组件都安装在/opt/android/和/opt/android/ndk/目录下。
我的CMakeLists.txt中包含以下配置片段:
set(CMAKE_SYSTEM_NAME Android) set(ANDROID_NDK_VERSION "26.1.10909125") set(ANDROID_ABI "armeabi-v7a") set(ANDROID_HOME "/opt/android") set(ANDROID_NDK "${ANDROID_HOME}/ndk/${ANDROID_NDK_VERSION}") set(ANDROID_PLATFORM "android-34") set(ANDROID_ARM_NEON ON) set(CMAKE_SYSTEM_VERSION 34) set(CMAKE_ANDROID_ARCH_ABI "${ANDROID_ABI}") set(CMAKE_TOOLCHAIN_FILE "${ANDROID_NDK}/build/cmake/android.toolchain.cmake") set(CMAKE_ANDROID_NDK "${ANDROID_NDK}")
但CMake生成构建文件时失败了,报错信息如下:
-- Android: Targeting API '34' with architecture 'arm', ABI 'armeabi-v7a', and processor 'armv7-a' CMake Error at /usr/share/cmake-3.22/Modules/Platform/Android-Initialize.cmake:97 (message): Android: The system root directory needed for the selected Android version and architecture does not exist: /opt/android/ndk/26.1.10909125/platforms/android-34/arch-arm Call Stack (most recent call first): /usr/share/cmake-3.22/Modules/CMakeSystemSpecificInitialize.cmake:21 (include) CMakeLists.txt:5 (project)
我搞不明白的是:为什么CMake要在NDK目录里找platforms文件夹?明明sdkmanager是把platforms安装在ANDROID_HOME的根目录下(比如/opt/android/platforms/)。另外,/opt/android/platforms/android-34/目录下也没有arch-arm这个子文件夹。
想问一下,是不是这些版本之间存在兼容性问题?还是我哪里明显配置错了?感谢各位的帮助!
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

