web-dev-qa-db-ger.com

Android Studio CMake-Fehler: Build-Befehl fehlgeschlagen

Beim Öffnen eines neuen Projekts in Android Studio aus den Code Samples (Hello JIN) tritt ein Fehler auf. Wenn das Projekt geöffnet ist, Folgendes:

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

Dieser Fehler lässt mehrere Male in der IDE zu

Ich verwende 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)
11
Biskit1943

@rpurohit hatte fast recht, Clang funktioniert nicht richtig. Um den Compiler zu ändern, müssen Sie jedoch build.gradle ändern. In meinem build.gradle war dies Zeile 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'
}
6
Biskit1943

Build -> Refresh Linked C++ Projects hat diesen Fehler für mich behoben.

16
A.Sanchez.SD

Ich würde vorerst die Verwendung von GCC anstelle von clang empfehlen, da clang noch nicht alle Funktionen enthält. Sie können Ihren Compiler folgendermaßen ändern: 

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

Das Verzeichnis darwin-x86_64 ist jedoch nur auf einem Mac vorhanden. Wenn Sie sich auf einer anderen Plattform befinden, verwenden Sie einfach das Verzeichnis, das sich im Ordner vor dem Erstellen befindet.

4
rpurohit

Falls die vorige Antwort nicht funktioniert, versuchen Sie, die Berechtigungen im Ordner bin von cmake und für ndk zu korrigieren. In meinem Fall: C:\Android-sdk\cmake\3.6.4111459\bin und c:\Android-sdk\ndk-Bundle

In meinem Fall hatte die Benutzergruppe keine Berechtigungen, daher konnte Android Studio cmake nicht ausführen. Stellen Sie sicher, dass es über Lese- und Ausführungsberechtigungen verfügt.

0
Víctor López

Ich bin auf dieses Problem gestoßen, weil ich den falschen Pfad von native-lib.cpp Festgelegt habe. Nach dem Wechsel

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

zu

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

es hat wieder funktioniert.

Dies ist übrigens Teil der Struktur meines Projekts.

CMakeLists.txt
src
 |__main
      |___jni
           |___native-lib.cpp
0
Searene

Dieser Fehler tritt manchmal auf, wenn Sie ein Upgrade von Gradle oder anderen Abhängigkeiten durchführen. Eine einfache Lösung ist Build> "Verknüpftes C++ - Projekt aktualisieren" und danach das Projekt neu erstellen. alles geht gut

0
Ali Maddi

Ich fand diese Lösung online und sie funktionierte, es gab jedoch keine Erklärung, wie sie funktionierte: Entfernen Sie den folgenden Codeblock aus Ihrer build.gradle-Datei:

externalNativeBuild {
    cmake {
        path "src/main/cpp/CMakeLists.txt"
    }
}
0
Mohd Zaid

Ich habe die oben angegebenen Lösungen ausprobiert, aber kein Glück. Dann habe ich den Pfad von OpenCV_DIR geändert, der in der Datei CMakeLists.txt festgelegt wurde, und es hat funktioniert. Mein Projekt zeigte nicht auf den richtigen Pfad, der den Fehler verursacht hat. Stellen Sie sicher, dass Sie den richtigen Pfad in Ihrer CMakeLists.txt-Datei angegeben haben. 

Zum Beispiel : 

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