cmakeを使用しているアンドロイドスタジオはc++をサポートし、問題は、cmakeのエラーを同期することはできません。
2022-02-18 13:25:32
質問
エラーメッセージ
External Native Build Issues
Build command failed.
Error while executing '/root/Android/Sdk/cmake/3.6.3155560/bin/cmake' with arguments { -H/AndroidStudioProjects/AccessQRat/app -B/ root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/debug/x86_64 -GAndroid Gradle - Ninja -DANDROID_ABI=x86_64 - DANDROID_NDK=/root/Android/Sdk/ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/root/AndroidStudioProjects/AccessQRat/app/. externalNativeBuild/cmake/debug/obj/x86_64 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=/root/Android/Sdk/cmake/3.6.3155560/bin/ ninja -DCMAKE_TOOLCHAIN_FILE=/root/Android/Sdk/cmake/3.6.3155560/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=21 -DCMAKE_CXX_ FLAGS=-std=c++11 -frtti -fexceptions}
-- Check for working C compiler: /root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- broken
-- Configuring incomplete, errors occurred!
See also "/root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/debug/x86_64/CMakeFiles/CMakeOutput.log".
See also "/root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/debug/x86_64/CMakeFiles/CMakeError.log".
CMake Error at /root/Android/Sdk/cmake/3.6.3155560/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler
"/root/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: /root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/debug/x86_64/CMakeFiles/CMakeTmp
Run Build Command:"/root/Android/Sdk/cmake/3.6.3155560/bin/ninja"
"cmTC_a0fde"
[1/2] Building C object CMakeFiles/cmTC_a0fde.dir/testCCompiler.c.o
[2/2] Linking C executable cmTC_a0fde
FAILED: : &&
/root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-target x86_64-none-linux-android -gcc-toolchain
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64
--sysroot=/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64 -g
-DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong
-no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security
-Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings
-Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro
-Wl,-z,now -Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE
CMakeFiles/cmTC_a0fde.dir/testCCompiler.c.o -o cmTC_a0fde -lm && :
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/. /... /... /... /x86_64-linux-android/bin/ld:
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib64/crtbegin_dynamic.o:
file is empty
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/... /... /... /... /x86_64-linux-android/bin/ld:
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib64/crtend_android.o:
file is empty
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/... /... /... /... /x86_64-linux-android/bin/ld:
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib64/libm.so:
file is empty
/root/Android/Sdk/ndk
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib64/libdl.so:
file is empty
Error:error: linker command failed with exit code 1 (use -v to see
invocation)
ninja: build stopped: subcommand failed.
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt
Error:executing external native build for cmake /root/AndroidStudioProjects/AccessQRat/app/CMakeLists.txt
Build command failed.
Error while executing '/root/Android/Sdk/cmake/3.6.3155560/bin/cmake' with arguments {-H/AndroidStudioProjects/AccessQRat/app -B/ root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/release/x86_64 -GAndroid Gradle - Ninja -DANDROID_ABI=x86_64 - DANDROID_NDK=/root/Android/Sdk/ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/root/AndroidStudioProjects/AccessQRat/app/. externalNativeBuild/cmake/release/obj/x86_64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=/root/Android/Sdk/cmake/3.6.3155560/bin /ninja -DCMAKE_TOOLCHAIN_FILE=/root/Android/Sdk/cmake/3.6.3155560/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=21 -DCMAKE_CXX_ FLAGS=-std=c++11 -frtti -fexceptions}
-- Check for working C compiler: /root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-- Check for working C compiler: /root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang -- broken
-- Configuring incomplete, errors occurred!
See also "/root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/release/x86_64/CMakeFiles/CMakeOutput.log" .
See also "/root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/release/x86_64/CMakeFiles/CMakeError.log".
CMake Error at /root/Android/Sdk/cmake/3.6.3155560/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 (message):
The C compiler
"/root/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: /root/AndroidStudioProjects/AccessQRat/app/.externalNativeBuild/cmake/release/x86_64/CMakeFiles/CMakeTmp
Run Build Command:"/root/Android/Sdk/cmake/3.6.3155560/bin/ninja"
"cmTC_f8bcf"
[1/2] Building C object CMakeFiles/cmTC_f8bcf.dir/testCCompiler.c.o
[2/2] Linking C executable cmTC_f8bcf
FAILED: : &&
/root/Android/Sdk/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang
-target x86_64-none-linux-android -gcc-toolchain
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64
--sysroot=/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64 -g
-DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong
-no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security
-Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings
-Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro
-Wl,-z,now -Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE
CMakeFiles/cmTC_f8bcf.dir/testCCompiler.c.o -o cmTC_f8bcf -lm && :
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/. /... /... /... /x86_64-linux-android/bin/ld:
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib64/crtbegin_dynamic.o:
file is empty
/root/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/linux-x86_64/lib/gcc/x86_64-linux-android/4.9.x/... /... /... /... /x86_64-linux-android/bin/ld:
Error:
/root/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/... /lib
そのため、android studioは同期できません。
(ここでAccessQRatは作成されたプロジェクト名です。)
問題の原因
私のndkフォルダandroid-21は満杯ではありませんが、android-24フォルダは満杯です、しかしcmakeはデフォルトで21を選択します、なぜ21を選択するのか分かりませんが
解決方法
最初にどのNDKのバージョンが完全であるかを確認し、NDK-build/platformsフォルダを見つけ、xxの後のandroid-xxは、番号を表し、つまり、プラットホームのバージョン、私のヒントここによると、明らかにNDKの私のバージョン21はファイルに問題がある、だから私は、バージョンを変更することを選択した私は私のバージョン24がいっぱいですことがわかったので、あなたはこれらのファイルは完全かつ有効であるかどうかを確認するreadelfコマンドを使用することができます。
ndk-buildの下にあるcmakeを検索し
cd ~/Sdk/cmake/3.6.3155560/
# Use vim to edit, you can also use other editors
vim android.toolchain.cmake
PLATFORMとPLATFORM_LEVELに関する記述を探しなさい。
if(ANDROID_PLATFORM MATCHES "^android-([0-8]|10|11)$")
set(ANDROID_PLATFORM android-9)
elseif(ANDROID_PLATFORM STREQUAL android-20)
set(ANDROID_PLATFORM android-19)
elseif(NOT ANDROID_PLATFORM)
set(ANDROID_PLATFORM android-9)
endif()
string(REPLACE "android-" "" ANDROID_PLATFORM_LEVEL ${ANDROID_PLATFORM})
if(ANDROID_ABI MATCHES "64(-v8a)? $" ANDANDROID_PLATFORM_LEVEL LESS 21)
set(ANDROID_PLATFORM android-21)
set(ANDROID_PLATFORM_LEVEL 21)
endif()
if(NOT ANDROID_STL)
set(ANDROID_STL gnustl_static)
endif()
ここで、setによってバージョンが設定されていることが推測できます。そこで、最終的に、自動決定させないようにして、強制的に24にするだけ、つまり、この段落の後に2つのset文を追加することにしました。
if(ANDROID_PLATFORM MATCHES "^android-([0-8]|10|11)$")
set(ANDROID_PLATFORM android-9)
elseif(ANDROID_PLATFORM STREQUAL android-20)
set(ANDROID_PLATFORM android-19)
elseif(NOT ANDROID_PLATFORM)
set(ANDROID_PLATFORM android-9)
endif()
set(ANDROID_PLATFORM android-24)
set(ANDROID_PLATFORM_LEVEL 24)
string(REPLACE "android-" "" ANDROID_PLATFORM_LEVEL ${ANDROID_PLATFORM})
if(ANDROID_ABI MATCHES "64(-v8a)? $" ANDANDROID_PLATFORM_LEVEL LESS 21)
set(ANDROID_PLATFORM android-21)
set(ANDROID_PLATFORM_LEVEL 21)
endif()
if(NOT ANDROID_STL)
set(ANDROID_STL gnustl_static)
endif()
アンドロイドスタジオに戻り、一度再同期すればOKです。
関連
-
cygwinのダウンロード、インストールチュートリアル、およびCDTの「makeプログラムがパスに見つからない」バグの解消
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
android studioが "The activity must be exported or contain an intent-filter" と表示され実行される。
-
Androidカスタムドロップダウンリストボックスコントロール
-
アンドロイドスタジオソフトウェア使用詳細説明書
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
android.content.ActivityNotFoundException を解決します。Intent問題を処理するActivityが見つからない
-
CursorIndexOutOfBoundsException:インデックス -1 が要求されました。
-
adb connection appears device not found 問題が解決された
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
AAPT2エラーについて:詳しくはログをご確認ください。
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
gitlab 設定エラー。リモートリポジトリから読み込めなかったか、ホストキーの検証に失敗しました。
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
ArrayAdapter は、リソース ID が TextView であることが必要です。
-
ActivityはOnFragmentInteractionListenerを実装しなければならないに関する質問
-
アンドロイドにおけるトークンの利用
-
Android ANR traces.txt ファイルエクスポート解析
-
新しいAndroidプロジェクトの作成時に、AndroidManifest.xmlファイルが見つからないというプロンプトが表示されます。