Я не могу включить предварительно построенную библиотеку в Android studio
Я написал одну программу на c++ в Ubuntu 16.04 64-битной системе. Я создал его статическую библиотеку. теперь у меня есть Android studio на Windows 10. Я хочу импортировать эту библиотеку в свой android-проект. но я не в состоянии сделать это, я получаю ошибку, подобную этой...
Build command failed.
Error while executing process C:UsersParthAppDataLocalAndroidSdkcmake3.6.4111459bincmake.exe with arguments {--build C:UsersParthDesktopNew folderOctopusapp.externalNativeBuildcmakedebugx86_64 --target native-lib}
[1/2] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
[2/2] Linking CXX shared library ........buildintermediatescmakedebugobjx86_64libnative-lib.so
FAILED: cmd.exe /C "cd . && C:UsersParthAppDataLocalAndroidSdkndk-bundletoolchainsllvmprebuiltwindows-x86_64binclang++.exe --target=x86_64-none-linux-android --gcc-toolchain=C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/windows-x86_64 --sysroot=C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/sysroot -fPIC -isystem C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/sysroot/usr/include/x86_64-linux-android -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -D__ANDROID_API__=15 -fexceptions -frtti -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -LC:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libnative-lib.so -o
........buildintermediatescmakedebugobjx86_64libnative-lib.so CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o ../../../../libs/abc.a -llog -latomic -lm "C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a" "C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a" && cd ."
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::cout'
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::cout'
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::ostream::operator<<(int)'
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
../../../../libs/abc.a(sum.o):sum.cpp:function sum(int, int): error: undefined reference to 'std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
../../../../libs/abc.a(sum.o):sum.cpp:function mul(int, int): error: undefined reference to 'std::ostream::operator<<(int)'
../../../../libs/abc.a(sum.o):sum.cpp:function mul(int, int): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
../../../../libs/abc.a(sum.o):sum.cpp:function mul(int, int): error: undefined reference to 'std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
../../../../libs/abc.a(sum.o):sum.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::Init()'
../../../../libs/abc.a(sum.o):sum.cpp:function __static_initialization_and_destruction_0(int, int): error: undefined reference to 'std::ios_base::Init::~Init()'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
2 ответа:
Во-первых , из скриншота вашего библиотечного проекта, вы используете ndk вместе с CMake, что не имеет никакого смысла. Все, что вы настроите внутри файлов
.mk
, то естьAndroid.mk
иApplication.mk
, не будет иметь никакого эффекта, если вы используете cmake. Попробуйте навести порядок в своем проекте.Во-вторых , ваши журналы ошибок указывают, что ваш
libstdc++.a
не на месте. Проверьте, существует путьC:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/libstdc++.a
или нет.Загрузить ndk из https://dl.google.com/android/repository/android-ndk-r17b-windows-x86_64.zip , распакуйте его и настройте этот путь внутри
local.properties
ndk.dir=<mypath>/Android/ndk/android-ndk-r17b-windows-x86_64 sdk.dir=<mypath>/Android/sdk
В-третьих , Вы должны убедиться, что все ваши
.a
статические библиотеки компилируются с помощью цепочек инструментов Android CMake, чтобы они были совместимы с вашим Android.
Вы читали этот поток? Он объясняет, как построить приложение для Android с поддержкой NDK