问题

错误信息

External Native Build IssuesBuild command failed.Error while executing '/root/Android/Sdk/cmake/3.6.3155560/bin/cmake' with arguments {-H/root/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-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/libdl.so:  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/libc.so:  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/libdl.so:  file is emptyError: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.txtError:executing external native build for cmake /root/AndroidStudioProjects/AccessQRat/app/CMakeLists.txtBuild command failed.Error while executing '/root/Android/Sdk/cmake/3.6.3155560/bin/cmake' with arguments {-H/root/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/../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-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/libdl.so:  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/libc.so:  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/libdl.so:  file is emptyError: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.txtError:executing external native build for cmake /root/AndroidStudioProjects/AccessQRat/app/CMakeLists.txt

于是android studio无法sync
(这里AccessQRat是创建的project的名称)

问题原因

我的ndk文件夹android-21下文件不全,但是android-24文件夹文件是全的,然而cmake默认选择了21,虽然我也不知道为什么就选择了21

解决方法

首先确认自己哪一个ndk版本是全的,找到ndk-build/platforms文件夹下,android-xx 后面的xx代表数字,即platmform的版本,根据我这里的提示,显然我的21版本的NDK有文件有问题,所以我选择换一个版本,因为我发现我24的版本是全的,具体的可以使用readelf命令来查看那几个文件是不是完整有效的.
找到ndk-build下cmake,进入

cd ~/Sdk/cmake/3.6.3155560/#使用vim进行编辑,也可以使用其他进行编辑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)?$" AND ANDROID_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来set版本,所以我最终选择不让他自动判断,直接强行设置为24,即在这段后面添加两个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)?$" AND ANDROID_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()

回到android studio 重新sync一次,万事大吉.

更多相关文章

  1. Android版本号对应API、版本名称、NDK版本等
  2. Android 文件夹命名规范 国际化资源
  3. android读取文件权限
  4. Android文件存储
  5. Android 播放资源文件视频
  6. 下载不同版本android studio
  7. android 日志文件输出
  8. Mac版Android studio中使用lambda表达式设置jdk版本问题

随机推荐

  1. as真机安装apk遇到的一个坑 INSTALL_FAIL
  2. Appcelerator Cloud Push Notification i
  3. android SQLiteOpenHelper 和 DatabaseEr
  4. android TextView中间删除线显示
  5. android 为textView设置selector
  6. Android Popupwindow 显示ListView
  7. Window下使用android NDK开发Android应用
  8. Android 界面的横竖屏监听
  9. 4. android 设置全屏且无标题
  10. import eclipse project to android stud