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
相关产品推荐
相关产品推荐

