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

macOS编译userver项目时遭遇fmt::join未定义的编译错误

macOS编译userver项目时遭遇fmt::join未定义的编译错误

看起来你在macOS上搭建userver项目时碰到了编译卡壳的问题,我帮你梳理下可能的原因和解决思路:

先确认你的问题场景

你当前的环境和操作步骤:

  • 系统:macOS
  • 依赖版本:Boost 1.85.0,clang 13.0.0
  • 操作流程:
    • 克隆了service_template模板项目,并将userver作为第三方依赖放入对应目录
    • 通过brew安装了userver文档中列出的macOS依赖
    • 执行make build-release时触发编译错误,错误信息如下:

49_USERVER/01_tutorial/service_template/third_party/userver/universal/src/yaml_config/impl/validate_static_config.cpp:59:44: error: no member named 'join' in namespace 'fmt'
enum_value.Asstd::string(), fmt::join(ordered_enum_values, ", ")));
~...

可能的原因和解决办法

这个错误本质是编译器找不到fmt::join符号,大概率是fmt库版本不兼容或者编译时引用的fmt库不符合userver的要求,你可以尝试以下方案:

  1. 检查brew安装的fmt版本
    先执行命令查看当前系统的fmt版本:
    brew list --versions fmt
    
    userver对fmt库有特定版本要求,如果你安装的版本过高(比如fmt 10+),可能会出现API兼容性问题。可以尝试安装指定版本的fmt,比如:
    brew unlink fmt
    brew install fmt@9
    brew link fmt@9 --force
    
  2. 强制使用userver内置的fmt依赖
    userver本身可能自带了兼容版本的fmt库,你可以在编译时指定cmake参数优先使用内置依赖,修改make命令对应的编译配置,或者直接在build目录下手动执行cmake:
    cd build-release
    cmake .. -DCMAKE_PREFIX_PATH=./third_party/userver/third_party/fmt
    make
    
  3. 升级clang编译器版本
    clang 13.0.0相对老旧,对C++20特性的支持可能不够完善,而fmt的新版本可能依赖这些特性。你可以通过brew升级llvm来获取新版本clang:
    brew install llvm
    echo 'export PATH="/usr/local/opt/llvm/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
    
    之后再重新执行编译命令。
  4. 确认userver子模块完整
    有时候克隆userver时可能没拉取全子模块,导致内置的fmt库缺失,执行以下命令补全子模块:
    cd service_template/third_party/userver
    git submodule update --init --recursive
    cd ../..
    make clean
    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.04.16 08:25:30