CMake ошибка "Не найден набор инструментов для ABI в NDK" при попытке собрать нативную библиотеку Android - PullRequest
0 голосов
/ 26 марта 2019

Я на машине с 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".

(Примечание: в этом примере я выбрал ABI x86, но на самом деле я получаю эту ошибку независимо от того, какой ABI я выберу, будь то x86, x86_64, arm и т. Д.)

Однако, когда я смотрю в каталог: $ {NDK-DIRECTORY} / toolschains / он содержит подкаталог с именем 'x86-4-9'.

Кроме того, в каталоге $ {NDK-DIRECTORY} / build / core / toolchains /

есть еще один каталог с именем 'x86-clang'.

Так что я не понимаю, почему CMake говорит мне, что не может найти цепочку инструментов для x86 ABI, когда она там есть?

Возможно, я неправильно понял, как работает процесс кросс-компиляции Android.

К сожалению, мне было трудно понять это, так как в Интернете, похоже, нет большой документации по этому поводу.

Ответы [ 3 ]

1 голос
/ 27 марта 2019

Если вы хотите создать собственный код вне Android Studio. Вам необходимо передать параметр файла цепочки инструментов в команду cmake:

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

измените <your-path> на свой собственный путь к файлу цепочки инструментов, например, ~/Library/Android/sdk/cmake/3.6.3155560/android.toolchain.cmake

0 голосов
/ 20 апреля 2019

Мне так и не удалось выяснить, в чем именно заключалась проблема (вот почему я не выбрал ответ), но в итоге я нашел обходной путь.Я просто понизил свой NDK до более ранней версии (что можно сделать, удалив папку NDK-Bundle, а затем загрузив новую из здесь ), и тогда все работало нормально.

0 голосов
/ 26 марта 2019

Я сталкивался с той же проблемой один раз. Для меня работало обновление старых зависимостей библиотеки до более новых версий.

...