【问题标题】:SDL 2.0 compiles, but failt to runSDL 2.0 编译,但无法运行
【发布时间】:2013-07-15 07:26:53
【问题描述】:

我在 Xubuntu 64 位上使用最新的 SDL 2.0 版本。我是通过源代码上提供的安装脚本安装的。

编译效果很好,但是当尝试打开字体或图像时(无论其扩展名如何),它总是无法打开。

#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>


int main (int argc, char *argvp[])
{


    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        cout << SDL_GetError() << endl;
    }


    if (TTF_Init() == -1)
    {
        std::cout << TTF_GetError() << std::endl;
        return 2;
    }


    TTF_Font *font1 = NULL;

    font1 = TTF_OpenFont("SourceSansPro-Regular.ttf", 20);  
    if (font1 == NULL)
    {
        std::cout << "ERROR OPENING FONT = " << TTF_GetError() << std::endl;
    }

    TTF_CloseFont(font1);
    SDL_Quit();
    return 0;
}

我用

编译
g++ -Wall fontTEST.cpp -o TEST -lSDL2 -lSDL_ttf (NOTE that SDL_ttf installs as such, not as SDL2_ttf)

并得到以下错误:Failed to load font: 0 Couldn't load font file

图像也会发生这种情况。我已经尝试过使用不同的字体和图像,显然如果我使用 SDL 1.2 编译它可以工作,而不是使用 2.0。 另外为什么提供的安装脚本会在 /user/local/ 中安装 lib 和 include 文件夹?

我将它们移至 /usr/,但问题仍然存在。

【问题讨论】:

  • “SourceSansPro-Regular.ttf”在哪里?
  • 在与源代码和可执行文件完全相同的文件夹中,我已经尝试使用 fnts 名称“asd.ttf”。这不是名称错误
  • 你试过strace吗?我觉得奇怪的是它打印的消息与您的消息不同。
  • 尝试更改路径。也许它会查找实际 .cpp 文件所在的文件。 SDL 是否提供工作目录常量?如果不是,请尝试修改您正在加载的路径以匹配文件系统结构。即:“app/src/fontTEST.cpp”中的源代码和“app/bin/SourceSansPro-Regular.ttf”中的资产。如果是这样,请尝试路径:“../bin/SourceSansPro-Regular.ttf”
  • 这里是更改路径 alex@anon 的完整输出:~/Documents/Code/C++/SDL2_Tests$ ./TEST ERROR OPENING FONT = Couldn't open ~/Documents/Code/C++/SDL2_Tests /SourceSansPro-Regular.ttf

标签: c++ linux runtime shared-libraries sdl


【解决方案1】:

记住以下几点:

  • 在 Unix 上,文件路径区分大小写
  • 正如 Xonar 的评论中所说,波浪号 '~' 扩展是一个 shell 功能,它在 C/C++ 程序中不起作用,您应该改用真实路径。

strace 日志清楚地表明路径有问题。

您应该尝试以下方法:

  • 将字体文件重命名为“font.ttf”
  • 放入/home/user/font.ttf
  • 在代码中使用“/home/user/font.ttf”作为路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-20
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多