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

编译MMMTools时出现‘operator/’不属于std::filesystem错误如何解决

问题原因分析
  • 首先std::filesystem::operator/是C++17才正式纳入标准库的特性,你的编译错误本质是编译器没有正确识别该特性的相关符号
  • 你当前的CMake配置确实启用了高于C17的标准(-std=c++2a是C20的早期预览版本),但存在两个适配问题:
    1. set(CMAKE_CXX_STANDARD_DEFAULT)的配置关闭了CMake对C++标准的自动管理逻辑,部分环境下会导致手动添加的-std=c++2a参数无法正确传递到编译环节
    2. 项目原配置适配Ubuntu 18.04(默认GCC 7),而Ubuntu 20.04默认使用GCC 9,不同版本GCC对filesystem的链接要求存在差异:GCC 8以下版本使用std::filesystem需要额外链接libstdc++fs库,GCC 9及以上版本已将filesystem纳入主标准库,无需额外链接
  • 你提到的set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")行本身没有问题,不需要修改该行内容
解决步骤

方案一:修改CMakeLists.txt(推荐,永久生效)

找到CMakeLists.txt中对应的编译器配置段,替换为以下内容:

###########################################################
#### Compiler configuration                            ####
###########################################################

set(CMAKE_POSITION_INDEPENDENT_CODE ON) # enable -fPIC

if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /MP")
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    # 明确指定C++17标准,覆盖原有失效的标准配置
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_CXX_STANDARD_REQUIRED ON)
    set(CMAKE_CXX_EXTENSIONS OFF)
    # 适配低版本GCC的filesystem链接需求
    if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
        link_libraries(stdc++fs)
    endif()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
endif()

add_compile_options(-Werror)

修改完成后清空原有build缓存,重新执行编译流程:

cd ~/MMMCore
rm -rf build
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)

方案二:临时传递编译参数(无需修改项目文件)

直接在cmake阶段指定标准参数即可,无需修改CMakeLists.txt:

cd ~/MMMCore
rm -rf build
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DCMAKE_CXX_STANDARD_REQUIRED=ON ..
make -j$(nproc)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:03