Android Studio from Code Samples(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)
@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'
}
ビルド->リンクされたC++プロジェクトを更新すると、このエラーが解決されました。
Clangにはまだすべての機能が含まれていないため、当面はclangの代わりにGCCを使用することをお勧めします。次の手順を実行して、コンパイラを変更できます。
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を使用している場合にのみ存在します。別のプラットフォームを使用している場合は、ビルド済みフォルダーの下にあるディレクトリを使用してください。
以前の回答がうまくいかない場合は、私が思いついたように、cmakeのbinフォルダーとndkのアクセス許可を修正してください。私の場合:C:\ Android-sdk\cmake\3.6.4111459\binおよびc:\ Android-sdk\ndk-bundle
私の場合、Usersグループには権限がなかったため、Android Studioはcmakeを実行できませんでした。読み取りおよび実行権限があることを確認してください。
native-lib.cpp
の間違ったパスを設定したため、この問題が発生しました。変更後
add_library(native-lib SHARED native-lib.cpp)
に
add_library(native-lib SHARED src/main/jni/native-lib.cpp)
再び機能しました。
ところで、これは私のプロジェクトの構造の一部です。
CMakeLists.txt
src
|__main
|___jni
|___native-lib.cpp
このエラーは、gradleまたはその他の依存関係をアップグレードするときに発生することがあります。簡単な解決策は、[ビルド]> [リンクされたC++プロジェクトを更新]で、その後プロジェクトを再構築することです。すべてがうまくいく
私はこのソリューションをオンラインで見つけましたが、これは機能しましたが、それがどのように機能したかについての説明はありませんでした:build.gradleファイルから次のコードブロックを削除します。
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
上記のソリューションを試しましたが、運はありませんでした。次に、CMakeLists.txtファイルに設定されたOpenCV_DIRのパスを変更し、機能しました。私のプロジェクトは正しいパスを指していないため、エラーが発生していました。 CMakeLists.txtファイルに正しいパスを指定したことを確認してください。
例えば :
set(OpenCV_DIR "...../OpenCV_Android/install/sdk/native/jni/abi-arm64-v8a")