我在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.
最佳答案
首先,从您的库项目的屏幕截图来看,您将 ndk 与 CMake 一起使用,这没有任何意义。无论您在 .mk
文件中配置什么,即 Android.mk
和 Application.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/