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

链接stdc++fs(std::experimental::filesystem)失败问题求助

解决ROS项目中std::experimental::filesystem未定义引用问题

问题原因

gcc 7.x版本中,std::experimental::filesystem属于实验特性,需要显式链接stdc++fs库才能使用。你单独编译test.cpp时手动指定了-lstdc++fs所以正常,但CMake项目中因链接配置的时机或方式不对,导致库未正确关联到目标可执行文件。

具体修改方案

1. 清理冗余配置

首先删除CMakeLists.txt中重复的set(HEADERS)块(你写了两次完全相同的内容,无意义),同时移除CMAKE_CXX_FLAGS中重复的-std=c++17——因为你已经通过CMAKE_CXX_STANDARD 17指定了C++标准,重复设置可能引发冲突:

# 原配置
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3")
# 修改后
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")

2. 修正链接库的添加方式

移除全局的link_libraries(stdc++fs),改为在目标可执行文件的链接列表中明确添加stdc++fs——全局链接指令可能因catkin_simple的封装逻辑未生效。修改后的可执行文件配置如下:

## Node
cs_add_executable(emsgc_main emsgc_main.cpp)
target_link_libraries(emsgc_main 
  ${PROJECT_NAME}_LIB 
  ${catkin_LIBRARIES} 
  ${OpenCV_LIBRARIES} 
  yaml-cpp 
  ${gsl_LIBRARIES} 
  stdc++fs)  # 确保此处明确添加stdc++fs

3. (可选)若库文件也用到filesystem

如果${PROJECT_NAME}_LIB中也调用了std::experimental::filesystem的接口,需要给库也添加链接:

cs_add_library(${PROJECT_NAME}_LIB ${HEADERS} ${SOURCES})
target_link_libraries(${PROJECT_NAME}_LIB stdc++fs)

重新编译验证

执行以下命令清理旧的编译缓存并重新编译:

catkin clean emsgc
catkin build emsgc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:42:03