2016-04-02 7 views
0

私はSDL2アプリケーションでテキストを描画するために次のコードを用意しています。ビルドして実行すると、私は一貫してTTF_OpenFont() Failed: Couldn't load font fileのエラーが表示されます。私は以下を試しました:SDL_ttf「フォントファイルをロードできませんでした」SDL2 with C++

  • フォントファイルが実行中のプログラムのカレントディレクトリにあることを確認してください。実際には、プログラムが実行されている可能性のあるほとんどのディレクトリにフォントを置き、絶対パスで試してみました。
  • 異なるアクセス許可を設定すると、ここで説明したよう
  • SDL_RWFromFileで個別にファイルを開くと、ファイルを所有している:http://www.gamedev.net/topic/275525-sdl_ttf-weirdness/
  • ダウンロードしてSDL_ttfの新しいバージョン(2.0.14)を再コンパイル

ここに私のコードは次のとおりです。

void SDLRenderer::drawText(
    const Vector2d& pos, 
    string message, 
    const Color& color) 
{ 
    if(!TTF_WasInit()) { 
    cerr << "TTF_Init failed " << TTF_GetError() << endl; 
    exit(1); 
    } 
    TTF_Font* fixed = TTF_OpenFont("./DejaVuSansMono.ttf", 16); 
    if (fixed == NULL) { 
    cerr << "TTF_OpenFont() Failed: " << TTF_GetError() << endl; 
    TTF_Quit(); 
    SDL_Quit(); 
    exit(1); 
    } 
    ... 

また、私はこのコードのクラスのコンストラクタからTTF_Init()を呼んでいます。また、gdbはエラーの後でバックトレースを与えないため、さらにTTF_OpenFont関数にステップインしてくれないようですので、さらにデバッグする方法は少し不明です。

答えて

0

私の考えはおそらくコメントに含まれていますが、評判が十分ではありません。現在の作業ディレクトリ(Linuxではunistd.hのchdir、Windowsではwindows.hのSetCurrentDirectory)を明示的に設定することで、正しいディレクトリにいることを確認できます。ファイル名に./を含める必要はないと思います。

TTF_Init,TTF_QuitTTF_Initを再度呼び出すと、SDL_ttfに問題があることを思い出しました。これはあなたの問題を引き起こしていないかもしれませんが、私はあなたのコンストラクタが実行されるたびに、をプログラムの初めに一度だけ、最後にTTF_Quitを1回だけ実行することを推奨します。

これが機能しない場合は、GDBでよりうまくいくSDL_ttfのデバッグバージョンを構築してください。

0

私はこの問題に遭遇しました。これは、SDL_ttfライブラリの不正なバージョンとのリンクによって発生しました。私はSDL 2.0を使用していましたが、libSDL2_ttf.soの代わりにlibSDL_ttf.soとリンクしていました。 libSDL_ttf.soはSDL 1.2用で、SDK 2.0と互換性がありません。

私の元のコマンドラインは:

$ gcc -o showfont showfont.c `sdl2-config --cflags --libs` -lSDL_ttf 
$ ./showfont /usr/share/fonts/truetype/freefont/FreeSans.ttf 
Couldn't load 18 pt font from /usr/share/fonts/truetype/freefont/FreeSans.ttf: Couldn't load font file 

は、私が代わりにlibSDL2_ttf.soに対してリンクすることによってそれを修正:

$ gcc -o showfont showfont.c `sdl2-config --cflags --libs` -lSDL2_ttf 
$ ./showfont /usr/share/fonts/truetype/freefont/FreeSans.ttf 
Font is generally 21 big, and string is 21 big 

showfont.cプログラムはexample included with SDL_ttfです。

関連する問題