MSYS2下Mingw链接freetype:找到符号却提示库不存在
MSYS2下FreeType链接错误的原因与解决
在MSYS2环境中编译程序时,若链接命令未添加FreeType相关库参数,会出现大量未定义符号错误,例如:
... undefined reference to `FT_Init_FreeType' ... undefined reference to `FT_New_Face' ... undefined reference to `FT_Set_Pixel_Sizes'
添加-lfreetype-6后,未定义符号错误消失,但出现链接器错误:
../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lfreetype-6: No such file or directory
已安装的FreeType库信息如下:
$ pacman -Ss freetype mingw32/mingw-w64-i686-freetype 2.12.1-1 TrueType font rendering library (mingw-w64) mingw64/mingw-w64-x86_64-freetype 2.12.1-1 [installed] TrueType font rendering library (mingw-w64) ucrt64/mingw-w64-ucrt-x86_64-freetype 2.12.1-1 TrueType font rendering library (mingw-w64) clang32/mingw-w64-clang-i686-freetype 2.12.1-1 TrueType font rendering library (mingw-w64) clang64/mingw-w64-clang-x86_64-freetype 2.12.1-1 TrueType font rendering library (mingw-w64)
原因解析
GCC能解析这些符号是因为编译阶段已经包含了FreeType的头文件,头文件中声明了FT_Init_FreeType等函数,所以编译过程不会报错。但链接阶段需要找到承载这些函数的实际库文件,而你用的-lfreetype-6参数不符合MSYS2中库的命名规则:
- MSYS2的mingw64环境下,FreeType的库文件名为
libfreetype.a(静态库)或libfreetype.dll.a(动态库导入库) - GCC的
-l参数会自动在库名前添加lib前缀,后缀追加.a或.dll.a,所以-lfreetype-6会让链接器寻找libfreetype-6.a或libfreetype-6.dll.a,但实际安装的库没有这个名称,因此报错找不到。
解决方法
将链接命令中的-lfreetype-6替换为-lfreetype即可正常链接。
内容的提问来源于stack exchange,提问作者jarlub
相关产品推荐
相关产品推荐

