来自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

有任何想法吗?

最佳答案

这些是链接错误。如果演示中包含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

关于c - FreeType库和 "Undefined reference to FT_Init_FreeType",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12312034/

10-11 21:16