gpt4 book ai didi

c++ - SDL_ttf "Couldn' t load font file"with SDL2 in c++

转载 作者:行者123 更新时间:2023-11-30 05:29:29 29 4
gpt4 key购买 nike

我有以下代码可以在 SDL2 应用程序中绘制一些文本。当我构建和运行时,我一直看到错误 TTF_OpenFont() Failed: Couldn't load font file。我尝试了以下方法:

  • 确保字体文件在运行程序的当前目录中。事实上,我已经将字体放在程序可以运行的几乎任何目录中,并尝试使用绝对路径。
  • 设置不同的权限并拥有文件
  • 使用 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 函数。

最佳答案

我遇到了这个问题,它是由链接到错误版本的 SDL_ttf 库引起的。我使用的是 SDL 2.0,但我链接的是 libSDL_ttf.so 而不是 libSDL2_ttf.solibSDL_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 .

关于c++ - SDL_ttf "Couldn' t load font file"with SDL2 in c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368862/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com