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

MacOS编译Userver框架报错:boost::uuids::uuid无法转换为utils::span

MacOS编译Userver框架时的Boost版本兼容错误

问题背景

在MacOS上依照Userver官方教程部署框架,执行以下操作:

git clone --depth 1 https://github.com/userver-framework/service_template.git && \
git clone --depth 1 https://github.com/userver-framework/userver.git service_template/third_party/userver && \
cd service_template

brew install $(cat third_party/userver/scripts/docs/en/deps/macos.md | tr '\n' ' ')

make build-release && \
make service-start-release

当前环境:

  • Boost版本:1.86.0
  • clang版本:13.0.0

编译错误信息

编译过程中出现如下错误:

25%] Building CXX object third_party/userver/universal/CMakeFiles/userver-universal.dir/src/utils/impl/byte_utils.cpp.o
/Users/mascai/root_folder/dev/projects/49_USERVER/01_tutorial/service_template/third_party/userver/universal/src/utils/boost_uuid7.cpp:49:27: error: no matching conversion for functional-style cast from 'boost::uuids::uuid::data_type' to 'utils::span<std::uint8_t>' (aka 'span<unsigned char>')
      GenerateRandomBlock(utils::span<std::uint8_t>(uuid.data).subspan(8));
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

问题原因

Boost 1.86.0对boost::uuids::uuid::data的返回类型做了变更——此前版本返回uint8_t*指针,而1.86.0返回std::array<uint8_t, 16>,Userver现有代码的span构造逻辑无法适配这个类型变化。

解决方案

方案1:降级Boost到兼容版本

卸载当前Boost并安装1.85.0版本:

brew uninstall boost
brew install boost@1.85
brew link boost@1.85 --force

完成后重新执行编译命令即可。

方案2:修改Userver源码适配新版本Boost

编辑third_party/userver/universal/src/utils/boost_uuid7.cpp文件,将第49行代码修改为:

GenerateRandomBlock(utils::span<std::uint8_t>(uuid.data.data(), uuid.data.size()).subspan(8));

修改后重新执行make build-release编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:22:11