You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:38:04