android - 我无法将预建库包含到 android studio 中

标签 android c++ c android-ndk static-libraries

我在Ubuntu 16.04 64位系统上写过一个c++程序。我制作了它的静态库。现在我在 Windows 10 上有一个 android studio。我想将该库导入到我的 android 项目中。但我无法做到这一点,我收到这样的错误...

Build command failed.
Error while executing process C:\Users\Parth\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build C:\Users\Parth\Desktop\New folder\Octopus\app\.externalNativeBuild\cmake\debug\x86_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 ..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libnative-lib.so
FAILED: cmd.exe /C "cd . && C:\Users\Parth\AppData\Local\Android\Sdk\ndk-bundle\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.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 
..\..\..\..\build\intermediates\cmake\debug\obj\x86_64\libnative-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.

this is my gradle file

this is my cMakeLists.text

最佳答案

首先,从您的库项目的屏幕截图来看,您将 ndk 与 CMake 一起使用,这没有任何意义。无论您在 .mk 文件中配置什么,即 Android.mkApplication.mk,如果您使用 制作。尝试清理您的项目。

其次,您的错误日志表明您的libstdc++.a 不存在。检查路径 C:/Users/Parth/AppData/Local/Android/Sdk/ndk-bundle/platforms/android-21/arch-x86_64/usr/lib/libstdc++.a 是否存在。

https://dl.google.com/android/repository/android-ndk-r17b-windows-x86_64.zip 下载 ndk ,解压并在 local.properties

中配置此路径
ndk.dir=<mypath>/Android/ndk/android-ndk-r17b-windows-x86_64
sdk.dir=<mypath>/Android/sdk

第三,您必须确保所有.a 静态库都是使用Android CMake 工具链编译的,以便它们与你的安卓。

关于android - 我无法将预建库包含到 android studio 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51998515/

相关文章:

c++ - 如何循环绘制事物(FLTK/C++)?

c - 这个 bool 表达式是如何工作的

c - 函数返回值没有返回语句

android - 为 ListView 中的项目设置 onClick 或 onItemSelected

android - RecyclerView取消选择之前选择的复选框

java - 如何使用 Retrofit2 下载文件?

android - Android Studio 中的模拟器

c++ - 从到非标量类型的迭代器错误转换

c++ - 我可以列出核心转储中的所有 VTable 指针吗?

c - sscanf,文字或指针格式