我正在尝试在 MacOS 上运行 userver(https://userver.tech/ )
我正在关注这个教程:https://userver.tech/d3/da9/md_en_2userver_2tutorial_2build.html
我的行动:
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
我有一个错误:
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 版本有关。我的 Boost 版本是 1.86.0,clang 是 13.0.0。
在 Boost 1.86.0 中,
uuid::data
成员的类型为uuid::data_type
,该struct
类型包含一个uint8_t[]
数组。您无法span
从 中生成struct
,因此会出现编译器错误。在 Boost 1.85.0 中,
uuid::data
成员是实际的uint8_t[]
数组,可以span
从中创建。因此,显然,userver 尚未更新以适应 Boost 中的这一变化。因此,您必须执行以下操作之一:
联系用户版本作者以获取正确支持 Boost 1.86.0 的更新。
自己更改 userver 以
span
使用以下任一方式构建:uuid
和迭代begin()
器end()
,例如:uuid
的data()
指针和size()
,例如:uuid::data
转换operator
为uint8_t[]
数组,例如:将您的 Boost 版本降级至 1.85.0。