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

如何解决freetype与harfbuzz库循环依赖导致的编译未定义引用错误?

解决MinGW静态编译Windows应用时Harfbuzz与FreeType的未定义引用问题

在Linux环境下使用x86_64-w64-mingw32.static-g++编译面向Windows的静态C++应用,通过MXE安装了SDL2、SDL2_image、SDL2_ttf和Boost的64位静态库,编译时出现以下Harfbuzz相关的FreeType函数未定义引用错误:

/home/user/.mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/user/.mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.2.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libharfbuzz.a(libharfbuzz_la-hb-ft.o):hb-ft.cc:(.text+0x11fd): undefined reference to `FT_Get_MM_Var'
/home/user/.mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/user/.mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.2.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libharfbuzz.a(libharfbuzz_la-hb-ft.o):hb-ft.cc:(.text+0x126b): undefined reference to `FT_Get_Var_Blend_Coordinates'
/home/user/.mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/user/.mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.2.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libharfbuzz.a(libharfbuzz_la-hb-ft.o):hb-ft.cc:(.text+0x1366): undefined reference to `FT_Done_MM_Var'
/home/user/.mxe/usr/bin/x86_64-w64-mingw32.static-ld: /home/user/.mxe/usr/lib/gcc/x86_64-w64-mingw32.static/11.2.0/../../../../x86_64-w64-mingw32.static/lib/../lib/libharfbuzz.a(libharfbuzz_la-hb-ft.o):hb-ft.cc:(.text+0x1676): undefined reference to `FT_Set_Var_Blend_Coordinates'

当前Makefile中的库链接配置:

WIN_STATIC_LIB = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf -lfreetype -lfontconfig -lcairo -lharfbuzz -lbz2 -lstdc++ -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lsetupapi -lwebp -lpng -lz -ljpeg -lSDL2_test -lsamplerate

解决方法

  • 调整库链接顺序:静态链接器按从左到右的顺序解析符号,循环依赖的库需要调整顺序或重复引用。将-lharfbuzz移至-lfreetype之后,若仍有问题,可重复添加-lfreetype确保Harfbuzz能找到所需的FreeType符号。修改后的配置示例:

    WIN_STATIC_LIB = -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf -lfontconfig -lcairo -lharfbuzz -lfreetype -lbz2 -lstdc++ -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lsetupapi -lwebp -lpng -lz -ljpeg -lSDL2_test -lsamplerate
    

    若循环依赖仍存在,可进一步重复-lfreetype(如-lharfbuzz -lfreetype -lfreetype)。

  • 验证MXE库的编译配置:确保MXE安装的Harfbuzz是启用FreeType支持编译的。若之前手动编译过库,重新编译Harfbuzz时指定--with-freetype选项;若通过MXE包管理器安装,执行mxe install harfbuzz freetype确保依赖完整。

  • 简化库列表排查:暂时移除非核心库(如lcairo、lfontconfig、lSDL2_test),先确保SDL2_ttf、FreeType、Harfbuzz的基础链接正常,再逐步添加其他库,排除其他库的干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:46:15