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

MinGW编译fmt彩色输出代码报错:fmt::v7::format_error::~format_error() was replaced

MinGW环境下使用fmt库带颜色格式化代码链接报错的原因与修复方案

问题描述

以下代码可正常编译运行:

#include "fmt/core.h"
#include "fmt/color.h"

void displayHelp() {
    fmt::print("Help!");
}

但添加颜色和格式修饰后的代码,在Windows MinGW环境下编译时出现链接错误:

#include "fmt/core.h"
#include "fmt/color.h"

void displayHelp() {
    fmt::print(fg(fmt::color::orange) | fmt::emphasis::bold,"Help!");
}

报错信息如下:

[ 94%] Built target Vibranium-Engine
[ 94%] Building CXX object dep/Vibranium-Engine/Vibranium/CMakeFiles/vibranium.dir/Vibranium.cpp.obj
[100%] Linking CXX executable V:\Vibranium-Core\vibranium.exe
ld.lld: error: fmt::v7::format_error::~format_error() was replaced
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
mingw32-make[3]: *** [dep\Vibranium-Engine\Vibranium\CMakeFiles\vibranium.dir\build.make:263: V:/Vibranium-Core/vibranium.exe] Error 1
mingw32-make[2]: *** [CMakeFiles\Makefile2:1957: dep/Vibranium-Engine/Vibranium/CMakeFiles/vibranium.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:1964: dep/Vibranium-Engine/Vibranium/CMakeFiles/vibranium.dir/rule] Error 2
mingw32-make: *** [Makefile:766: vibranium] Error 2

该代码在macOS和Linux环境下可正常运行。

报错原因

这个链接错误的核心是fmt库的format_error析构函数被重复定义,在MinGW环境下触发该问题的常见场景:

  1. 项目同时引入了多个版本的fmt库(比如子模块的v7版本和系统安装的其他版本)
  2. 混合使用了静态链接和动态链接的fmt库,导致符号冲突
  3. CMake构建缓存残留旧配置,导致链接时引入重复的目标文件

修复方法

  • 统一fmt库的链接方式
    在项目的CMakeLists.txt中显式指定使用静态或动态链接:

    # 强制使用静态链接
    set(FMT_USE_STATIC_LIBS ON)
    # 或使用动态链接:set(FMT_USE_DYNAMIC_LIBS ON)
    find_package(fmt REQUIRED)
    
  • 清理重复依赖
    检查项目中是否存在多处引入fmt的情况(比如子模块、系统包管理器安装的库),保留唯一的依赖源,确保所有编译目标都链接同一个版本的fmt库。

  • 显式指定fmt版本
    由于报错明确指向fmt v7,在CMake中锁定对应版本避免不匹配:

    find_package(fmt 7 REQUIRED)
    
  • 重置构建缓存
    删除项目中的build目录和CMakeCache.txt文件,重新运行CMake生成构建文件,清除旧配置缓存的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:51:16