Ошибка Android Studio CMake: сбой команды сборки

У меня возникает ошибка, когда я открываю новый проект в Android Studio из примеров кода (Hello JIN). При открытии проекта следующее:

Build command failed.
Error while executing process /opt/android-sdk/cmake/3.6.4111459/bin/cmake with arguments {-H/home/max/Documents/AndroidStudioProjects/HelloJNI1/app/src/main/cpp -B/home/max/Documents/AndroidStudioProjects/HelloJNI1/app/.externalNativeBuild/cmake/arm8Release/arm64-v8a -GAndroid Gradle - Ninja -DANDROID_ABI=arm64-v8a -DANDROID_NDK=/opt/android-sdk/ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/home/max/Documents/AndroidStudioProjects/HelloJNI1/app/build/intermediates/cmake/arm8/release/obj/arm64-v8a -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=/opt/android-sdk/cmake/3.6.4111459/bin/ninja -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23 -DANDROID_TOOLCHAIN=clang}
-- Check for working C compiler: /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- broken
-- Configuring incomplete, errors occurred!
See also "/home/max/Documents/AndroidStudioProjects/HelloJNI1/app/.externalNativeBuild/cmake/arm8Release/arm64-v8a/CMakeFiles/CMakeOutput.log".
See also "/home/max/Documents/AndroidStudioProjects/HelloJNI1/app/.externalNativeBuild/cmake/arm8Release/arm64-v8a/CMakeFiles/CMakeError.log".
CMake Error at /opt/android-sdk/cmake/3.6.4111459/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 (message):
  The C compiler
  "/opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang"
  is not able to compile a simple test program.
  It fails with the following output:
   Change Dir: /home/max/Documents/AndroidStudioProjects/HelloJNI1/app/.externalNativeBuild/cmake/arm8Release/arm64-v8a/CMakeFiles/CMakeTmp
  Run Build Command:"/opt/android-sdk/cmake/3.6.4111459/bin/ninja"
  "cmTC_0053d"
  [1/2] Building C object CMakeFiles/cmTC_0053d.dir/testCCompiler.c.o
  FAILED:
  /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
  --target=aarch64-none-linux-android
  --gcc-toolchain=/opt/android-sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
  --sysroot=/opt/android-sdk/ndk-bundle/sysroot -isystem
  /opt/android-sdk/ndk-bundle/sysroot/usr/include/aarch64-linux-android
  -D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables
  -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat
  -Werror=format-security -fPIE -o
  CMakeFiles/cmTC_0053d.dir/testCCompiler.c.o -c
  /home/max/Documents/AndroidStudioProjects/HelloJNI1/app/.externalNativeBuild/cmake/arm8Release/arm64-v8a/CMakeFiles/CMakeTmp/testCCompiler.c
  /opt/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang:
  error while loading shared libraries: libncurses.so.5: cannot open shared
  object file: No such file or directory
  ninja: build stopped: subcommand failed.
  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt

Эта ошибка многократно падает в среде IDE.

Я использую Arch-Linux 64x

Cmake.txt:

    cmake_minimum_required(VERSION 3.4.1)

add_library(hello-jni SHARED
            hello-jni.c)

# Include libraries needed for hello-jni lib
target_link_libraries(hello-jni
                      android
                      log)

person Biskit1943    schedule 20.07.2017    source источник
comment
У меня была такая же проблема, не могли бы вы опубликовать свой CMakeLists.txt?   -  person rpurohit    schedule 20.07.2017
comment
хорошо, я отредактировал сообщение   -  person Biskit1943    schedule 20.07.2017
comment
Какую версию NDK вы используете? Некоторые версии имеют ограниченную поддержку компилятора clang.   -  person rpurohit    schedule 20.07.2017
comment
Пользуюсь 15.1.4119093   -  person Biskit1943    schedule 20.07.2017
comment
@rpurohit У меня такая же проблема. не могли бы вы помочь мне в моем вопросе. stackoverflow.com/questions/51100111/.   -  person Nitish Patel    schedule 03.07.2018


Ответы (9)


Сборка -> Обновить связанные проекты C ++ устранила эту ошибку для меня.

person A.Sanchez.SD    schedule 10.05.2018
comment
Это спасатель. У меня это тоже сработало. Мой совет: сначала попробуйте то, а потом другое. - person SnuKies; 17.06.2018
comment
В первый раз не получилось. Но после понижения NDK с версии 17 до 15, понижение kotlin 1.2.41 до 1.2.31 и выбор этой опции Build - ›Refresh Linked C ++ Projects у меня работает. - person Shanki Bansal; 09.08.2018
comment
Большое спасибо! действительно спасает жизнь. У меня работал в Windows 10. - person Ciro Mine; 20.09.2018
comment
Эта опция неактивна после создания нового проекта. - person BenR; 09.03.2020

Я нашел это решение в Интернете, и оно сработало, однако не было объяснения того, как оно работает: удалите следующий блок кода из файла build.gradle:

externalNativeBuild {
    cmake {
        path "src/main/cpp/CMakeLists.txt"
    }
}
person Mohd Zaid    schedule 28.06.2019
comment
видимо, эта штука вроде работает нормально. Не знаю почему ... - person nutella_eater; 12.10.2020
comment
спасибо, это сработало для меня - person Mimu Saha Tishan; 25.03.2021

@rpurohit был почти прав, Clang не работает должным образом. Но чтобы изменить компилятор, вам нужно изменить build.gradle, в моем build.gradle это была строка 12:

apply plugin: 'com.android.application'

1 android {
2    compileSdkVersion 25
3    buildToolsVersion '25.0.2'
4    defaultConfig {
5       applicationId 'com.example.hellojni'
6       minSdkVersion 23
7       targetSdkVersion 25
8       versionCode 1
9       versionName "1.0"
10      externalNativeBuild {
11          cmake {
12              arguments '-DANDROID_TOOLCHAIN=clang' --> gcc
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
    productFlavors {
        arm7 {
            // in the future, ndk.abiFilter might also work
            ndk {
                abiFilter 'armeabi-v7a'
            }
        }
        arm8 {
            ndk {
                abiFilters 'arm64-v8a'
            }
        }
        arm {
            ndk {
                abiFilter 'armeabi'
            }
        }
        x86 {
            ndk {
                abiFilter 'x86'
            }
        }
        x86_64 {
            ndk {
                abiFilter 'x86_64'
            }
        }
        mips {
            ndk {
                abiFilters 'mips', 'mips64'
            }
        }
        universal {
            ndk {
                abiFilters 'mips', 'mips64', 'x86', 'x86_64'
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
}
person Biskit1943    schedule 22.07.2017
comment
В моем случае это дает Не удалось получить неизвестное свойство 'gcc' для объекта типа com.android.build.gradle.internal.dsl.ExternalNativeCmakeOptions. Я не могу поверить, насколько плохо Google это понял. - person John Perry; 10.09.2017
comment
Вы спасатель! - person Tahlil; 17.08.2018

Я бы рекомендовал пока использовать GCC вместо clang, потому что clang по-прежнему не содержит всех функций. Вы можете изменить свой компилятор, выполнив следующие действия:

set(CMAKE_C_COMPILER /path-to-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-gcc)

Однако каталог darwin-x86_64 существует только на Mac. Если вы работаете на другой платформе, просто используйте каталог, который существует в предварительно созданной папке.

person rpurohit    schedule 20.07.2017
comment
Попробуйте запустить его в начале CMakeLists.txt. - person rpurohit; 20.07.2017
comment
У меня эта доза не сработала. Ошибка осталась прежней, поэтому команда не сработала: / - person Biskit1943; 21.07.2017
comment
@ Biskit1943 Как изменить компилятор с clang на GCC? Можете ли вы объяснить правильные шаги, потому что я столкнулся с той же ошибкой? - person Nitish Patel; 03.07.2018
comment
@rpurohit Я думаю, что этот ответ сейчас устарел - person user3738870; 19.10.2019

Я столкнулся с этой проблемой, потому что установил неправильный путь native-lib.cpp. После изменения

add_library(native-lib SHARED native-lib.cpp)

to

add_library(native-lib SHARED src/main/jni/native-lib.cpp)

это снова сработало.

Кстати, это часть структуры моего проекта.

CMakeLists.txt
src
 |__main
      |___jni
           |___native-lib.cpp
person Searene    schedule 17.06.2019

Если предыдущий ответ не работает для вас, как это случилось со мной, попробуйте исправить разрешения в папке bin cmake и для ndk. В моем случае: C: \ android-sdk \ cmake \ 3.6.4111459 \ bin и c: \ android-sdk \ ndk-bundle

В моем случае у группы пользователей не было разрешений, поэтому Android Studio не смогла запустить cmake. Убедитесь, что у него есть разрешения на чтение и выполнение.

person Víctor López    schedule 10.10.2017

Эта ошибка иногда возникает при обновлении gradle или других зависимостей. простое решение - «Сборка»> «Обновить связанный проект C ++», а затем перестройка проекта. все идет хорошо

person Ali Maddi    schedule 03.06.2018

Я пробовал решения, представленные выше, но не повезло. Затем я изменил путь к OpenCV_DIR, который был установлен в файле CMakeLists.txt, и он сработал. Мой проект не указывал на правильный путь, что вызывало ошибку. Убедитесь, что вы указали правильный путь в файле CMakeLists.txt.

Например :

set(OpenCV_DIR "...../OpenCV_Android/install/sdk/native/jni/abi-arm64-v8a")
person Paramita    schedule 25.02.2019

Я считаю, что этот способ может работать:

добиться успеха здесь

не нужно удалять ниже:

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }

это полезно. и ваш проект только меньше файла ниндзя.

вы можете летать таким образом, можете построить успешно!

вот результат:

Make was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.

ты должен установить ниндзя

  1. загрузите ниндзя здесь загрузите файл ниндзя
  2. получить файл ниндзя
  3. скопируйте файл ниндзя в / usrlocal / bin
  4. построить снова. проект выполнен успешно !!
person lixiaodaoaaa    schedule 02.06.2020
comment
Можете ли вы объяснить, как именно это решает указанную выше проблему? - person Mohd Zaid; 27.08.2020