尝试构建本机Android库时,CMake错误“在NDK中找不到ABI的工具链”

时间:2019-03-25 21:09:49

标签: android cmake android-ndk cross-compiling

我在Linux机器上,我想将我的C ++源代码交叉编译到Android平台的本机库中,因此我使用以下命令调用CMake:

cmake -DCMAKE_SYSTEM_NAME=Android -DCMAKE_ANDROID_NDK=/home/stav/Android/Sdk/ndk-bundle -DCMAKE_ANDROID_ARCH_ABI=x86 -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..

这会导致以下错误:

-- Android: Targeting API '28' with architecture 'x86', ABI 'x86',     and processor 'i686'
CMake Error at /usr/share/cmake-3.12/Modules/Platform/Android/Determine-Compiler-NDK.cmake:97 (message):
  Android: No toolchain for ABI 'x86' found in the NDK:

    /home/stav/Android/Sdk/ndk-bundle

Call Stack (most recent call first):
  /usr/share/cmake-3.12/Modules/Platform/Android/Determine-    Compiler.cmake:39 (include)
  /usr/share/cmake-3.12/Modules/Platform/Android-Determine-C.cmake:1     (include)
  /usr/share/cmake-3.12/Modules/CMakeDetermineCCompiler.cmake:27     (include)
  CMakeLists.txt:3 (project)


-- Configuring incomplete, errors occurred!
See also "/home/stav/cmake_test/build/CMakeFiles/CMakeOutput.log".

(注意:在此示例中,我选择了x86 ABI,但无论选择哪个ABI,无论是x86,x86_64,arm等,我实际上都遇到此错误)

但是,当我查看目录时: $ {NDK-DIRECTORY} / toolschains / 确实包含一个名为“ x86-4-9”的子目录。

$ {NDK-DIRECTORY} / build / core / toolchains /

下还有另一个名为“ x86-clang”的目录

所以我很困惑,为什么CMake告诉我它似乎确实没有找到x86 ABI的工具链?

也许我误解了Android交叉编译过程的工作方式。

不幸的是,由于在网上似乎没有太多的文档,因此我一直很难弄清它。

3 个答案:

答案 0 :(得分:0)

我曾经遇到过同样的问题。对我有用的是将库的旧依赖项更新为较新版本。

答案 1 :(得分:0)

如果您要构建Android Studio的本机代码外部。您需要将工具链文件选项传递给cmake命令:

-DCMAKE_TOOLCHAIN_FILE=<your-path>/android.toolchain.cmake

<your-path>更改为您自己的工具链文件路径,例如~/Library/Android/sdk/cmake/3.6.3155560/android.toolchain.cmake

答案 2 :(得分:0)

我从未设法弄清楚问题出在哪里(这就是为什么我没有选择答案的原因),但是我最终找到了解决方法。我只是将我的NDK降级为较早的版本(您可以通过删除NDK-Bundle文件夹,然后从here下载一个新的文件夹来实现),然后一切正常。