编译NDK项目时Android Studio中的链接器错误

时间:2017-07-26 02:05:43

标签: android android-ndk cmake

我正在尝试使用Android Studio 2.3构建NDK项目,NDK与它集成,Gradle 3.3,我使用的是一些共享库(NDK附带,也存在于设备中),这些共享库是在CMakeLists.txt中列出了做"清洁项目" Gradle成功完成,没有错误,

8:36 PM Gradle sync started
8:37 PM Gradle sync completed
8:37 PM Executing tasks: [:app:generateDebugSources,:app:generateDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies]
8:37 PM Gradle build finished in 12s 541ms

但是在运行项目时会出现链接器错误。

> Build command failed.
Error while executing process C:\Users\user\AppData\Local\Android\sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build F:\StudioPrj\Aaudio\app\.externalNativeBuild\cmake\debug\mips64 --target native-lib}
[1/1] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\mips64\libnative-lib.so
FAILED: cmd.exe /C "cd . && C:\Users\user\AppData\Local\Android\sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe  --target=mips64el-none-linux-android --gcc-toolchain=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/sysroot -fPIC -isystem C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/sysroot/usr/include/mips64el-linux-android -D__ANDROID_API__=24 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fintegrated-as -Wa,--noexecstack -Wformat -Werror=format-security  -frtti -fexceptions -std=c++11 -Wall -Werror -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a --sysroot C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/platforms/android-24/arch-mips64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\mips64\libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o CMakeFiles/native-lib.dir/src/main/cpp/AaudioImp.cpp.o  -laaudio -llog -latomic -landroid -lm 
"C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/mips64/libgnustl_static.a" && cd ."
C:/Users/user/AppData/Local/Android/sdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/mips64el-linux-android/4.9.x/../../../../mips64el-linux-android/bin\ld: cannot find -laaudio
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)

从错误中看,工具链似乎无法链接到libaaudio,但我在我的代码中使用了1个头文件。来自这个。所以

#include <aaudio/AAudio.h>

NDK也正确地向我展示了这个模块的所有可用选项,所以我不认为这个.so没有链接到项目。只是为了确认这些路径中已存在更多libaaudio(此lib附带NDK包)

  

C:\用户\用户\应用程序数据\本地\的Android \ SDK \ NDK束\平台\机器人-26 \拱形臂的\ usr \ lib中       C:\用户\用户\应用程序数据\本地\的Android \ SDK \ NDK束\平台\机器人-26 \拱形arm64 \ USR \ lib中       C:\用户\用户\应用程序数据\本地\的Android \ SDK \ NDK束\平台\机器人-26 \拱-MIPS的\ usr \ lib中      C:\用户\用户\应用程序数据\本地\的Android \ SDK \ NDK束\平台\机器人-26 \拱形MIPS64 \ USR \ lib中       C:\用户\用户\应用程序数据\本地\的Android \ SDK \ NDK束\平台\机器人-26 \拱86的\ usr \ lib中      C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch-x86_64 \ usr \ lib

1 个答案:

答案 0 :(得分:1)

  

- sysroot C:/ Users / user / AppData / Local / Android / sdk / ndk-bundle / platforms / android-24 / arch-mips64

你的目标是android-24,aaudio直到android-26才可用。