版权声明:本文为博主原创文章,未经博主允许不得转载。 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编译工具(记得备份)。