使用 CMake / Android NDK / sdkmanager 构建失败

问题描述 投票:0回答:1

我一直在尝试使用以下设置为 Android armeabi-v7a 编译 C 库:

  • Ubuntu
  • CMake 3.22
  • Android cmdline-tools 10406996_latest

然后我用sdkmanager来安装

  • 构建工具34.0.0
  • 平台 android-34
  • 平台工具
  • 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 正在寻找

platforms
中的
ndk
目录,而
sdkmanager
似乎将所有内容安装在
ANDROID_HOME
的根目录下(例如
/opt/android
)。而且
arch-arm
中似乎没有任何
/opt/android/platforms/android-34
目录...

知道这些版本不兼容吗?或者我遗漏了一些明显的东西?

谢谢!

android cmake android-ndk android-sdk-manager
1个回答
0
投票

按照@Tsyvarev的建议,替换:

set(CMAKE_TOOLCHAIN_FILE "${ANDROID_NDK}/build/cmake/android.toolchain.cmake")
... 经过:
ìnclude("${ANDROID_NDK}/build/cmake/android.toolchain.cmake")
...为我成功了。

© www.soinside.com 2019 - 2024. All rights reserved.