2017-07-26 323 views
0

我正在嘗試使用Android Studio 2.3構建NDK項目,NDK與它集成在一起,Gradle 3.3中,我使用了一些共享庫(它與NDK一起提供,設備),以及這些共享庫在上市的CMakeLists.txt做「清潔工程」搖籃成功不誤,編譯NDK項目時Android Studio中的鏈接器錯誤

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頭文件在我的代碼從這個未來是.so這樣

#include <aaudio/AAudio.h> 

也NDK是正確的向我展示這個模塊的所有可用選項,所以我不認爲這個.so與項目沒有關聯。只是爲了確認更多的libaaudio已經存在於這些路徑中(這個lib帶有NDK包)

C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch \ arm \ usr \ lib C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch-arm64 \ usr \ lib C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch-mips \ usr \ lib C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch -mips64 \ usr \ lib C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch-x86 \ usr \ lib C:\ Users \ user \ AppData \ Local \ Android \ sdk \ ndk-bundle \ platforms \ android-26 \ arch-x86_64 \ usr \ lib

+0

你是在編譯代碼的時候,你需要下載代碼(從android studio IDE或https://github.com/googlesamples/android-audio-high-performance?它被設置爲使用android-26和clang 。你可以試試去你下載的目錄,然後rm -fr your-dir/app/.externalNativeBuild,你的app/app/build?如果它仍然發生,那是一個bug,將會看到它。thx – Gerry

+0

我有將minSdkVersion設置爲24,我認爲系統在API版本24中查找libaaudio,當然這並不存在,將minSdkVersion設置爲26即可編譯。 – hellrocker

+0

謝謝!DanAlbert是正確的,aaudio只支持android-O及更高版本。 – Gerry

回答

1

--sysroot C:/用戶/用戶/應用程序數據/本地/安卓/ SDK/NDK束/平臺/ Android的24 /拱MIPS64

你指定Android -24,並且aaudio在android-26之前不可用。