8

PHP から来て、これが C/C++ の初めての経験です (だから、私に気をつけてください)。このチュートリアルに従って、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

何か案は?

4

1 に答える 1

19

これらはリンクエラーです。デモに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
于 2012-09-07T05:11:22.877 に答える