You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C++20的filesystem时,仍需链接stdc++fs库吗?

关于g++9下experimental::filesystem是否需要链接stdc++fs的问题

好问题!结合你使用的g++-9(9.3.0)和CMake 3.16版本,我来给你拆解清楚:

  • 为什么现在不用链接也能编译通过?
    在g++ 9及更高版本中,当你启用C17或更高标准时,experimental::filesystem(以及正式的std::filesystem)的实现已经被整合进默认的libstdc++主库中了,不再需要依赖单独的stdc++fs库。这是GCC团队在g9版本做出的调整——之前的g8及更早版本,即使开启C17,filesystem相关的组件还是作为独立库发布,必须显式链接才能避免未定义引用错误。

  • 省略链接命令会不会有问题?
    完全不会,反而更推荐你省略这条命令。原因有两个:

    1. 对于你的g++9版本来说,stdc++fs库要么已经是空的,要么其内容和主库完全重复,链接它不会带来任何好处,纯粹是做无用功;
    2. 未来如果升级编译器版本,这条多余的链接指令可能会引发不必要的警告(甚至极端情况下的冲突,不过概率极低)。
  • 有没有需要注意的例外情况?
    如果你不小心将CMake的C标准设置为C14或更低,同时仍在使用experimental::filesystem,那还是需要链接stdc++fs的。但从你的描述来看,你现在不用链接也能编译通过,说明你的项目肯定已经启用了C++17及以上标准,所以这个情况对你不适用。

总结一下:针对你的环境,删掉target_link_libraries(MyTarget stdc++fs)完全安全,而且是更简洁的正确做法。

内容的提问来源于stack exchange,提问作者Hirek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:52:45