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

macOS编译Wt失败:boost::filesystem无directory_iterator成员

解决macOS编译Wt 4.10.4时boost::filesystem::directory_iterator不存在的错误

问题根源

Boost 1.85.0对filesystem库做了重大调整,把directory_iterator、recursive_directory_iterator这类迭代器类迁移到了boost::filesystem::experimental命名空间,但Wt 4.10.4的代码仍在使用旧的命名空间路径,导致编译器找不到这些类型,触发报错。

解决方法

方法一:降级Boost到兼容版本(推荐)

Wt 4.10.4官方适配的Boost版本最高到1.84.0,降级是最稳妥的方案:

  • 先卸载当前的Boost:
    sudo rm -rf /usr/local/include/boost
    sudo rm -rf /usr/local/lib/libboost_*
    
  • 下载Boost 1.84.0源码,解压后进入目录执行编译安装:
    ./bootstrap.sh
    ./b2 install
    
  • 清空Wt的build目录,重新执行编译流程:
    rm -rf build && mkdir build && cd build
    cmake ../
    make -j8
    

方法二:修改Wt源码适配Boost 1.85.0

如果不想降级Boost,直接修改Wt的源码来适配新命名空间:

  • 打开Wt源码目录下的src/web/FileUtils.C文件,在文件开头的#include之后添加这段兼容代码:
    #if BOOST_VERSION >= 108500
    namespace boost { namespace filesystem {
        using experimental::directory_iterator;
        using experimental::recursive_directory_iterator;
    }}
    #endif
    
  • 保存文件后回到build目录,重新执行编译:
    make -j8
    

方法三:通过编译宏强制兼容

在cmake阶段添加编译宏,让Boost filesystem库保留旧的迭代器命名:

cmake ../ -DCMAKE_CXX_FLAGS="-DBOOST_FILESYSTEM_NO_DEPRECATED"
make -j8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:32:03