Android :clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuan7016/article/details/85679075

  今天在使用Android Studio3.0.1 ,升级了build:gradle 后,编译项目报错:clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)      ninja:build stopped:subcommand failed.

 FAILURE: Build failed with an exception.

  * What went wrong:
  Execution failed for task ':lib_lame:externalNativeBuildRelease'.
  > Build command failed.
    Error while executing process D:\android\cmake\3.6.3155560\bin\cmake.exe with arguments {--build F:\git\LameMp3Demo\lib_lame\.externalNativeBuild\cmake\release\x86 --target LaneMp3}
    [1/1] Linking C executable LaneMp3
    FAILED: cmd.exe /C "cd . && D:\android\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe  --target=i686-none-linux-android --gcc-toolchain=D:/android/ndk-bundle/toolchains/x86-4.9/prebuilt/windows-x86_64 --sysroot=D:/android/ndk-bundle/sysroot -isystem D:/android/ndk-bundle/sysroot/usr
  /include/i686-linux-android -D__ANDROID_API__=17 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -Wa,--noexecstack -Wformat -Werror=format-security -DSTDC_HEADERS -O2 -DNDEBUG  -Wl,--exclude-libs,libgcc.a --sysroot D:/android/ndk-bundle/pl
  atforms/android-17/arch-x86 -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/LaneMp3.dir/src/main/cpp/bitstream.c.o CMakeFiles/LaneMp3.dir/src/main/cp
  p/encoder.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/fft.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/gain_analysis.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/id3tag.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/lame.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/mpglib_interface.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/native
  -lib.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/newmdct.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/presets.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/psymodel.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/quantize.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/quantize_pvt.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/reservoir.c
  .o CMakeFiles/LaneMp3.dir/src/main/cpp/set_get.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/tables.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/takehiro.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/util.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/vbrquantize.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/VbrTag.c.o CMakeFiles/L
  aneMp3.dir/src/main/cpp/version.c.o CMakeFiles/LaneMp3.dir/src/main/cpp/xmm_quantize_sub.c.o  -o LaneMp3  ../../../../build/intermediates/cmake/release/obj/x86/libnative_lame_mp3.so -lm && cd ."
    D:/android/ndk-bundle/platforms/android-17/arch-x86/usr/lib\crtbegin_dynamic.o:crtbegin.c:function _start: error: undefined reference to 'main'
    clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
    ninja: build stopped: subcommand failed.

    具体报错信息应该是 LameMp3依赖库,这是个Android录制MP3格式的库,里面用到了.so库,所以用了cMake编译;找了很多资料后并没有解决,最后怀疑是ndk的问题,所以升级到ndk版本到最新18版本后 再次编译又报了另一个错:

No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

   后来去 ndk-bundle ->toolchains 目录下果然没找到mips64el-linux-android 文件夹,所以到官网(https://developer.android.google.cn/ndk/downloads/)下载了最新的ndk后解压,把里面的mips64el-linux-android 文件夹复制到自己ndk-bundle ->toolchains 目录下。一切准备就绪,最后再次编译,成功。

  总结: 项目中用到要编译.so的时候,最好升级一下ndk和cMake编译工具(记得备份)。

猜你喜欢

转载自blog.csdn.net/yuan7016/article/details/85679075