MinGW编译含Freetype程序出现FT_Init_FreeType未定义引用错误如何解决
问题修复方案
错误原因
链接找不到FT_Init_FreeType符号是由以下几个问题共同导致的:
- 未安装i686-w64-mingw32目标架构的FreeType开发库,仅安装了宿主Linux系统的原生FreeType库,无法用于Windows目标的交叉编译
- 调用pkg-config时仅获取了头文件编译参数,未获取对应架构的链接参数
- 手动sed替换路径的方式容易出错,没有使用交叉编译场景专用的pkg-config调用规则
具体修复步骤
- 首先安装对应架构的交叉编译FreeType库,以Debian/Ubuntu系列发行版为例:
sudo apt install mingw-w64-i686-freetype
其他发行版请自行安装对应i686 Win32目标的MinGW版FreeType开发包。
- 然后修改编译命令,使用交叉编译专用的pkg-config同时获取编译和链接参数,调整链接顺序:
i686-w64-mingw32-gcc game.c -O3 -o Game \ $(i686-w64-mingw32-pkg-config --cflags freetype2) \ -lglfw3dll -lopengl32 -lmingw32 -lgdi32 -luser32 -lkernel32 -lpthread -lm \ $(i686-w64-mingw32-pkg-config --libs freetype2)
注意:依赖库的链接参数要放在源码文件的后方,GCC会按照从左到右的顺序解析符号依赖。
补充说明
如果你的系统中没有i686-w64-mingw32-pkg-config命令,可以手动指定pkg-config的搜索路径后再执行编译:
export PKG_CONFIG_PATH=/usr/i686-w64-mingw32/lib/pkgconfig i686-w64-mingw32-gcc game.c -O3 -o Game \ $(pkg-config --cflags freetype2) \ -lglfw3dll -lopengl32 -lmingw32 -lgdi32 -luser32 -lkernel32 -lpthread -lm \ $(pkg-config --libs freetype2)
你可以执行以下命令验证pkg-config输出是否正确,正常输出的路径都应该以/usr/i686-w64-mingw32/开头:
echo $PKG_CONFIG_PATH pkg-config --cflags --libs freetype2
内容的提问来源于stack exchange,提问作者Shadoww
相关产品推荐
相关产品推荐

