在编译课本上的代码示例时,遇到编译错误:
ld: library not found for -lstdc++fs
。这个错误是什么意思以及如何解决它?
% make filesystem
Consolidate compiler generated dependencies of target filesystem
[100%] Linking CXX executable filesystem
ld: library not found for -lstdc++fs
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [chapter_17/filesystem] Error 1
make[2]: *** [chapter_17/CMakeFiles/filesystem.dir/all] Error 2
make[1]: *** [chapter_17/CMakeFiles/filesystem.dir/rule] Error 2
make: *** [filesystem] Error 2
简而言之,不再需要链接
stdc++fs
,因为它已合并到基础库中。
当教科书第一次编写时,C++ 库还没有正式支持文件系统,因此它们需要一个名为
stdc++fs
的辅助库。这是一个 libstdc++
特定库,导入了官方库中尚未包含的 C++17 功能。
现在,GCC 的
libstdc++
和 Clang 的 libc++
都将其包含在其基础库中,并且 stdc++fs
库已被删除。
您可以毫无问题地删除对该库的链接;它修复了编译器支持中不再相关的问题
我将 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -lstdc++") 和 target_link_libraries(stdc++) 与 cmake 一起使用。