web-dev-qa-db-fra.com

Erreur Android Studio CMake: Echec de la commande de génération

Je rencontre une erreur lorsque j'ouvre un nouveau projet dans Android Studio à partir des exemples de code (Hello JIN). Lorsque le projet est ouvert, les éléments suivants:

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

Cette erreur supprime plusieurs fois dans l'EDI

J'utilise 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 avait presque raison, Clang ne fonctionnait pas correctement. Mais pour changer le compilateur, vous devez changer build.gradle, dans mon build.gradle c'était Line 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

Construire -> Actualiser Les projets C++ liés ont résolu cette erreur pour moi.

16
A.Sanchez.SD

Je recommanderais d'utiliser GCC au lieu de clang pour le moment, car clang ne contient toujours pas toutes les fonctionnalités. Vous pouvez changer votre compilateur en procédant comme suit: 

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

Cependant, le répertoire darwin-x86_64 n'existe que si vous êtes sur un Mac. Si vous êtes sur une autre plate-forme, utilisez simplement le répertoire qui existe dans le dossier préconfiguré.

4
rpurohit

Si la réponse précédente ne fonctionne pas pour vous, comme cela m'est arrivé, essayez de corriger les autorisations dans le dossier bin de cmake et pour ndk. Dans mon cas: C:\Android-sdk\cmake\3.6.4111459\bin et c:\Android-sdk\ndk-bundle

Dans mon cas, le groupe d’utilisateurs n’avait pas d’autorisations et Android Studio n’a donc pas pu exécuter cmake. Assurez-vous qu'il dispose des autorisations de lecture et d'exécution.

0
Víctor López

Cette erreur se produit parfois lorsque vous mettez à niveau gradle ou d'autres dépendances . Une solution simple consiste à Construire> "Actualiser le projet C++ lié" puis à reconstruire votre projet. tout va bien

0
Ali Maddi

J'ai essayé les solutions fournies ci-dessus mais pas de chance. Puis j'ai changé le chemin d'OpenCV_DIR qui était défini dans le fichier CMakeLists.txt et cela a fonctionné. Mon projet ne pointait pas sur le bon chemin, ce qui causait l'erreur. Assurez-vous que vous avez fourni le bon chemin dans votre fichier CMakeLists.txt. 

Par exemple : 

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