【问题标题】:FreeType library and "Undefined reference to FT_Init_FreeType"FreeType 库和“对 FT_Init_FreeType 的未定义引用”
【发布时间】:2012-09-07 05:07:35
【问题描述】:

来自 PHP,这是我第一次使用 C/C++(所以请放轻松)。我正在关注this tutorial 使用 FreeType 库编写一个简单的脚本。下面的编译就好了:

#include <ft2build.h>
#include FT_FREETYPE_H

main() {
    FT_Library library;
    FT_Face face;
}

这告诉我编译器可以随时使用 FreeType 库。但是,一旦我尝试使用任何方法,事情就会中断。比如下面的脚本:

#include <ft2build.h>
#include FT_FREETYPE_H

main() {

    int error;

    FT_Library library;
    error = FT_Init_FreeType(&library);
    if (error) {}

    FT_Face face;
    error = FT_New_Face(library, "/usr/share/fonts/truetype/arial.ttf", 0, &face);
    if (error == FT_Err_Unknown_File_Format) {
        printf("Font format is unsupported");
    } else if (error) {
        prinft("Font file is missing or corrupted");
    }
}

此脚本在编译时产生以下错误:

#gcc render.c -I/usr/include/freetype2
/tmp/cc95255i.o: In function `main':
render.c:(.text+0x10): undefined reference to `FT_Init_FreeType'
render.c:(.text+0x30): undefined reference to `FT_New_Face'
collect2: ld returned 1 exit status

有什么想法吗?

【问题讨论】:

    标签: c linker shared-libraries freetype


    【解决方案1】:

    这些是链接错误。如果他们在演示中包含一个 Makefile,你最好使用它。否则,您需要在编译命令行中添加 -L 和 -l 选项,以便编译器(实际上是链接器,由编译器在后台调用)知道在哪里可以找到 FreeType 库。

    -L 选项给出了库代码所在的路径。例如

    -L/usr/local/lib  
    

    -l 选项给出了库的名称。以 -l 选项命名的库以缩短的形式指定,即去掉前面的“lib”和后面的“.a”。例如,如果 FreeType 库存储在文件 libfreetype.a 中,它会在 -l 选项中显示为

    -lfreetype
    

    例如:

    gcc render.c -I/usr/include/freetype2 -L/usr/local/lib -lfreetype
    

    【讨论】:

    • 成功了!谢谢!我认为必要的文件是通过 includes 选项链接的。我想我真的不明白 library 是什么。我认为这只是源代码文件的集合,这就是为什么我认为'-I/usr/include/freetype2' 就足够了。很多东西要学...
    • @David 很高兴我能提供一些帮助。是的,只是让一个程序在 C 中编译和链接可能是一种折磨。这只是解释型语言如此受欢迎的一个重要原因!
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多