1

我有问题,链接到stdc++fs(std::exeperimental::filesystem) 不起作用。

本质上,我对我的目标有以下调用:

target_link_libraries(${TARGETNAME} PRIVATE "c++fs" "c++experimental")
target_link_libraries(${TARGETNAME} PRIVATE MyCoreDeps)

这导致

/usr/local/opt/llvm-7.0/bin/clang++  -g  -L/usr/local/opt/llvm-7.0/lib 
-Wl,-rpath,/usr/local/opt/llvm-7.0/lib  
-fsanitize=address 
CMakeFiles/ExecutionGraphTest-ExecutionTree.dir/src/main_ExecutionTree.cpp.o 
CMakeFiles/ExecutionGraphTest-ExecutionTree.dir/src/TestFunctions.cpp.o  
-o ExecutionGraphTest-ExecutionTree 
-Wl,-rpath,...some..paths... 
../lib/libExecutionGraph-CoreForTests-dbg.so.1.0.3
../lib/libgtestd.a
 ../lib/libgmock_maind.a 
-lc++fs -lc++experimental 
../../buildExternal/install/fmt/lib/libfmt.a
../../buildExternal/install/rttr/lib/librttr_core.so.0.9.7
../../buildExternal/install/flatbuffers/lib/libflatbuffers.a
../../buildExternal/install/crossguid/lib/libcrossguid.a /usr/lib/x86_64-linux-gnu/libuuid.so 
../lib/libgmockd.a 
../lib/libgtestd.a 
-pthread

哪个失败是因为-lc++fs它位于链接命令的中间,而不是最后,因为它是一个静态库?我该如何规避这一点,为什么 cmake 不能正确地做到这一点,这意味着为链接器提供正确的依赖关系,我在这里做错了什么?

输出:

/usr/bin/ld: ../lib/libExecutionGraph-CoreForTests-dbg.so.1.0.3: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
/usr/bin/ld: ../lib/libExecutionGraph-CoreForTests-dbg.so.1.0.3: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::compare(std::experimental::filesystem::v1::__cxx11::path const&) const'
4

1 回答 1

2

遗憾的是,没有-lc++fs未使用的错误消息。正确的命名很重要:stdc++fs

target_link_libraries(${TARGETNAME} PRIVATE "stdc++fs" "c++experimental")
于 2018-11-24T15:02:59.673 回答