问题

错误信息

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清单文件属性大全
  2. [android警告]AndroidManifest.xml警告 Not targeting the lates
  3. Android版本号对应API、版本名称、NDK版本等
  4. Android学习笔记之mainfest文件中android属性
  5. Android从1.0到11版本特性
  6. Android(安卓)文件夹命名规范 国际化资源
  7. Android中JNI的使用方法
  8. android studio 各种问题 应该能帮助到你们
  9. 【解决方法】Unexpected namespace prefix “xmlns” found for

随机推荐

  1. mysql数据库详解(基于ubuntu 14.0.4 LTS
  2. 用shell写一个mysql数据备份脚本
  3. 分析Mysql事务和数据的一致性处理问题
  4. MySQL中slave_exec_mode参数详解
  5. MySQL的慢日志线上问题及优化方案
  6. linux系统下安装配置解压版的MySQL数据库
  7. Mysql5.6.36脚本编译安装及初始化教程
  8. 浅谈Mysql指定顺序排序查询
  9. Mysql数据库双机热备难点分析
  10. Mysql通过Adjacency List(邻接表)存储树