最近,我一直致力于在Debian上的Code :: Blocks 10.03上使用SDL2的项目。我需要加载一些PNG图像和一个字体来写一些东西到屏幕上。但是,当我尝试加载文件时,IMG_load和TTF_OpenFont都会产生分段错误。
我100%确定文件位于当前路径上,因为使用buckt.png
而不是bucket.png
等错误的文件名会导致SDL_GetError和IMG_GetError返回“无法打开buckt.png” ,与TTF文件相同;而如果我使用正确的文件名,则会导致段错误。有趣的是,如果我从命令行编译项目,使用g++ main.cpp -std=c++11 -lSDL2 -lSDL2_image -lSDL2_ttf
它编译并运行完美,但由于我被迫使用Code :: Blocks,终端不是一个选项
对于showcase,此代码段位于main函数的最顶部。正如您可能已经猜到的那样,在Code :: Blocks上,它将不起作用。
#include <iostream>
#include <limits>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
using namespace std;
int main( int argc, char* args[] ) {
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
TTF_Init();
// The segfault is caused here, using Code::Blocks
TTF_Font *gFont = TTF_OpenFont("LiberationMono-Bold.ttf",20);
if (gFont == NULL) {
// This is never reached
cout << "gFont is empty!" << endl;
}
TTF_Quit();
SDL_Quit();
}
执行工作目录设置为.
,它是Code :: Blocks项目的主文件夹,也是字体和图像所在的位置。
如果有人找到解决此问题的方法,请告诉我。