即使使用-lstdc ++ fs

时间:2019-05-12 12:46:20

标签: linker filesystems c++17 clion

我已尝试在Fedora 29环境的CLion项目中使用<filesystem>。 直接从终端进行编译时,它可以顺利运行,但是当我尝试从CLion进行编译时,则存在有关文件系统的链接器问题。我不知道我还能做什么。有什么建议吗?

  • g ++(GCC)8.3.1 20190223(Red Hat 8.3.1-2)
  • clang版本7.0.1 (Fedora 7.0.1-6.fc29)

这是我已经尝试过的:

我添加了-lstdc ++ fs标志:

set(CMAKE_CXX_FLAGS -lstdc++fs)

但是我没有工作。我已经验证了

是否正在使用此标志
set( CMAKE_VERBOSE_MAKEFILE on ) 

似乎是:

[ 50%] Building CXX object CMakeFiles/untitled.dir/main.cpp.o
/usr/bin/g++    -lstdc++fs -g   -std=gnu++17 -o 
CMakeFiles/untitled.dir/main.cpp.o -c 
/home/patryk/CLionProjects/untitled/main.cpp
[100%] Linking CXX executable untitled
/home/patryk/clion-2018.3.4/bin/cmake/linux/bin/cmake -E 
cmake_link_script CMakeFiles/untitled.dir/link.txt --verbose=1
/usr/bin/g++  -lstdc++fs -g   CMakeFiles/untitled.dir/main.cpp.o  -o 
untitled 
/usr/bin/ld: CMakeFiles/untitled.dir/main.cpp.o: in function 
`std::filesystem::__cxx11::path::path<char [2], 
std::filesystem::__cxx11::path>(char const (&) [2], 
std::filesystem::__cxx11::path::format)':
/usr/include/c++/8/bits/fs_path.h:184: undefined reference to 
`std::filesystem::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status

我也尝试过使用clang编译器获得完全相同的结果。

main.cpp
#include <iostream>
#include <filesystem>

int main() {
    std::filesystem::path p("D");
    return 0;
}

1 个答案:

答案 0 :(得分:0)

CMake使用target_link_libraries添加-l链接器标志。

target_link_libraries(your_executable stdc++fs)

为什么set(CMAKE_CXX_FLAGS -lstdc++fs)不起作用:必须在源文件或目标文件后之后设置-l选项。

c++ -lstdc++fs some_object.o -o executable # not working
c++ some_object.o -o executable -lstdc++fs # should work