c++ - 即使使用 -lstdc++fs 也无法链接 std::filesystem

标签 c++ cmake linker std

我正在尝试编译一个使用 std::filesystem 的应用程序。我使用 CMake 作为构建系统,使用 g++-8 作为编译器。

我的 CMakeLists.txt 包括 target_link_libraries(<target_name> PUBLIC stdc++fs)set(CMAKE_CXX_STANDARD 17)

make VERBOSE=1表明 -lstdc++fs在链接器命令中使用。

尽管如此,我在使用 std::filesystem 组件的任何地方都得到了 undefined reference 。

它在 Docker 中编译得很好,所以这显然是一个环境问题。

有什么追踪它的技巧吗?

编辑: 由于公司规定,我无法发布确切的错误消息,而且它也很长。不过,我会发布一个截断的匿名版本:

CMakeFiles/ProjectName.dir/src/ui/dir_a/file_a.cpp.o: In function `ProjectName::ClassName::update(ProjectName::Body&)':
/home/username/prog/bots/src/ui/dir_a/file_a.cpp:30: undefined reference to `std::filesystem::current_path[abi:cxx11]()'
/home/username/prog/bots/src/ui/dir_a/file_a.cpp:35: undefined reference to `std::filesystem::create_directories(std::filesystem::__cxx11::path const&)'
CMakeFiles/ProjectName.dir/src/ui/dir_a/file_a.cpp.o: In function `std::filesystem::__cxx11::path::operator+=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
/usr/include/c++/8/bits/fs_path.h:817: undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'
CMakeFiles/ProjectName.dir/src/ui/dir_a/file_a.cpp.o: In function `std::filesystem::__cxx11::path::operator+=(char const*)':
/usr/include/c++/8/bits/fs_path.h:825: undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'
CMakeFiles/ProjectName.dir/src/ui/dir_a/file_a.cpp.o: In function `std::filesystem::exists(std::filesystem::__cxx11::path const&)':
/usr/include/c++/8/bits/fs_ops.h:121: undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&)'
CMakeFiles/ProjectName.dir/src/ui/dir_b/file_b.cpp.o: In function `ProjectName::ClassName::update[abi:cxx11]()':
/home/username/prog/bots/src/ui/dir_b/file_b.cpp:30: undefined reference to `std::filesystem::current_path[abi:cxx11]()'
/home/username/prog/bots/src/ui/dir_b/file_b.cpp:34: undefined reference to `std::filesystem::create_directories(std::filesystem::__cxx11::path const&)'
/home/username/prog/bots/src/ui/dir_b/file_b.cpp:36: undefined reference to `std::filesystem::__cxx11::directory_iterator::operator*() const'
/home/username/prog/bots/src/ui/dir_b/file_b.cpp:40: undefined reference to `std::filesystem::__cxx11::path::replace_extension(std::filesystem::__cxx11::path const&)'
/home/username/prog/bots/src/ui/dir_b/file_b.cpp:36: undefined reference to `std::filesystem::__cxx11::directory_iterator::operator++()'
CMakeFiles/ProjectName.dir/src/ui/dir_b/file_b.cpp.o: In function `std::filesystem::__cxx11::path::path(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::filesystem::__cxx11::path::format)':
/usr/include/c++/8/bits/fs_path.h:177: undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'

这样持续了一百多行。

软件版本:

Ubuntu 18.04
g++-8 (installed with `apt`)
CMake 3.14.2

最佳答案

升级到 g++ 9 解决了这个问题,但是如果有人知道如何解决这个问题并且仍然使用 g++ 8,我会接受这个答案。

关于c++ - 即使使用 -lstdc++fs 也无法链接 std::filesystem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495609/

相关文章:

c++ - 是否可以使用 Visual Studio 6.0(VC98 编译器)构建使用 list 指定依赖项的应用程序?

c++ - 如何将 OpenMP 和 MPI 导入大型 CLion CMake 项目?

visual-c++ - CMakeLists.txt 中的 CMake Warning (dev) : No cmake_minimum_required command is present. 一行代码如 cmake_minimum_required(VERSION 3.9)

c - 为什么链接程序需要 stdlib?

javascript - 如何列出 em++ 找到的所有符号?

c - 如何将 VSTS .lib 转换为 MinGW .a?

c++ - 通过引用转换指针

c++ - 在 V8 中,为什么 Isolate::GetCurrent() 返回 NULL?

C++ 类 : read value behave as different types

android - 为 Android arm64-v8a 构建 OpenCV 时出错