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)
@ 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'
}
Construire -> Actualiser Les projets C++ liés ont résolu cette erreur pour moi.
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é.
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.
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
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")