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

MacOS下g++-11编译Folly代码报fmt未声明错误问题咨询

报错根因

这个报错和你写的测试逻辑代码无关,两个核心诱因:

  • 你使用的编译命令缺失大量必要参数,既没有指定Folly、其依赖的fmt库、gtest库的头文件搜索路径、库文件搜索路径与链接选项,也没有指定C++17及以上的语言标准(新版本Folly强制要求C++17/20编译标准,低版本标准无法通过编译)
  • 部分版本Folly的FBString.h中对fmt库的formatter特化逻辑没有做兼容保护,当编译器没有提前识别到fmt库的命名空间时,就会直接抛出*'fmt' has not been declared*的错误。
修复方案
  1. 调整头文件引入顺序,在所有Folly头文件之前优先引入fmt核心头文件,修改后代码开头部分如下:
    #include <fmt/format.h>
    #include <folly/executors/ExecutorWithPriority.h>
    #include <folly/executors/CPUThreadPoolExecutor.h>
    #include <folly/futures/Future.h>
    #include <folly/portability/GTest.h>
    
    using namespace folly;
    // 后续原有逻辑保持不变即可
    
  2. 替换原有简陋的编译命令,补全所有必要参数。注意将命令中的路径替换为你本机实际的依赖安装路径:
    g++-11 folly.cpp -std=c++17 \
    -I/Users/tannyxie/Documents/Project Preparation/github/folly_include/installed/folly/include \
    -L/Users/tannyxie/Documents/Project Preparation/github/folly_include/installed/folly/lib \
    -lfolly -lfmt -lgtest -lpthread -ldl \
    -o folly_test
    

    如果你是通过Homebrew安装的fmt、gtest依赖:Apple Silicon芯片Mac的默认依赖路径为/opt/homebrew/下的include和lib目录,Intel芯片Mac的默认依赖路径为/usr/local/下的include和lib目录,编译器会默认搜索这两个路径,不需要额外添加-I和-L指定。

  3. 如果按上述步骤修改后仍然报错,检查本地安装的fmt版本是否和Folly版本匹配:2023年之后发布的Folly版本要求fmt版本不低于8.1.0,版本差过大会出现命名空间、接口不兼容的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:48:21