获取 clang++:错误:在编译文件系统库的代码时
Getting clang++: error: while compiling code contaning filesystem library
我正在尝试在Android项目中的本机代码中使用文件系统。但是收到此错误:
失败:
C:/Users/Johnsnow/AndroidStudioProjects/abc/Application/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib1.so
cmd.exe /C "cd . && C:UsersJohnsnowAppDataLocalAndroidSdkndk21.1.6352462toolchainsllvmprebuiltwindows-x86_64binclang++.exe --target=armv7-none-linux-androideabi16 --gcc-toolchain=C:/Users/Johnsnow/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/Users/Johnsnow/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -stdlib=libc++ -O0 -fno-limit-debug-info -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_real.a -Wl,--exclude-libs,libatomic.a -Wl,--build-id -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib1.so -o C:UsersJohnsnowAndroidStudioProjectsabcApplicationappbuildintermediatescmakedebugobjarmeabi-v7alibnative-lib1.so @CMakeFiles/native-lib1.rsp && cd ."
C:/Users/Johnsnow/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1/filesystem:1615: error: undefined reference to 'std::__ndk1::__fs::filesystem::__status(std::__ndk1::__fs::filesystem::path const&, std::__ndk1::error_code*)'
C:/Users/Johnsnow/AppData/Local/Android/Sdk/ndk/21.1.6352462/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include/c++/v1/filesystem:1637: error: undefined reference to 'std::__ndk1::__fs::filesystem::__file_size(std::__ndk1::__fs::filesystem::path const&, std::__ndk1::error_code*)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
我包括它的方式是:
#include <filesystem>
在我使用的 c++ 代码中:
std::filesystem::path
构建.gradle 中的 cmake 内容:
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-16',
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared'
}
}
尝试的选项:
我尝试在cmakeLists中添加libc ++.txt
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
还尝试过:
target_link_libraries(native-lib1 -lstdc++)
还尝试过:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -stdlib=libc++")
其中 native-lib1 是我正在尝试添加的库。但它不起作用。 我的 NDK 版本是:21.1.6352462
请提出一些解决方法。
对std::filesystem
的支持看起来最早会登陆Android NDK r22:
此实现现在已签入到 master 中,并将在 r22 中。我已经将剩余的测试清理分叉到 #1265 中,所以我可以关闭它以明确你们关心的部分是完整的,而无需阅读整个事情:)
链接线程有一些解决方法,例如使用boost::filesystem
或只是自己构建std::filesystem
库(libc++fs
(。
我为了让std::filesystem
工作所做的是将解决方案平台更改为x64
而不是默认Win32
。
我在Visual Studio的控制台应用程序中做了这个。
但是,我希望这会有所帮助。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 实验性文件系统库不完整C++?
- 不确定如何装饰我的C++库代码以在 C 中使用
- 无法链接文件系统库C++
- 无法识别 Mac c++ 文件系统库
- 获取 clang++:错误:在编译文件系统库的代码时
- 如果 copts 不允许系统路径,如何引用外部依赖项使用的系统库?
- 从 make 调用 CMake 以获取系统库路径
- 我有一个关于我的战斗系统HP代码的问题
- 如何使用文件系统库获取"true"文件大小?(C++17)
- 如何在没有系统/库的情况下控制GPIO
- 如何使用 swagger-codegen cpprest 客户端库代码?
- 如何使用 c++ 文件系统库将文件复制到另一个目录
- 如何在Bazel中静态链接系统库
- GCC 显示系统库中的错误.-iSystem 不起作用
- 使用boost ::文件系统库中的输出中的奇怪字符
- libstdc++ 系统库在 OpenBSD 和 FreeBSD 上没有剥离
- SWIG - C ++到Python.链接系统库
- 我无法编译文件系统库
- 是否可以使用不在标头中的 c++ 库代码?