SDL2:IMG_Load() - Raspberry Pi 上的分段错误
SDL2: IMG_Load() - Segmentation fault on Raspberry Pi
这个在 Ubuntu 上完美运行的简单代码在我的 Raspberry Pi v3 上因分段错误而崩溃:
#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
int main()
{
char* artworkPath = "./testfile.png";
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
{
SDL_Log("SDL fails to initialize video subsystem!\n%s", SDL_GetError());
return -1;
}
else
printf("SDL correctly initialized!\n");
if((IMG_Init(IMG_INIT_PNG)&IMG_INIT_PNG) != IMG_INIT_PNG)
printf("IMG_Init: %s\n", IMG_GetError());
else
printf("Fine!\n");
SDL_Surface* artworkSurface = IMG_Load(artworkPath);
if (artworkSurface == NULL)
{
printf("Error on loading PNG image\n");
return -1;
}
else
return 0;
}
加载 PNG 图像时出错 从未显示,因为它在加载过程中因分段错误而崩溃,知道吗?
解决方案
libpng 1.2.50 和 1.6.36 存在错误,无法正确加载图像。
SDL Image 库安装它自己的此类库的依赖项,correct/only 在 Raspberry Pi 上使用 SDL Image 的方法是从源代码编译 libpng 和 SDL 库。
所以,下载libpng16(来自GitHub)和SDL2_image-2.0.5(来自官方网站)源代码,编译(首先是 libpng)并安装它们。这样你就会在你的系统上找到 libpng 1.6.38.git 没有这个问题
这个在 Ubuntu 上完美运行的简单代码在我的 Raspberry Pi v3 上因分段错误而崩溃:
#include "SDL2/SDL.h"
#include "SDL2/SDL_image.h"
int main()
{
char* artworkPath = "./testfile.png";
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
{
SDL_Log("SDL fails to initialize video subsystem!\n%s", SDL_GetError());
return -1;
}
else
printf("SDL correctly initialized!\n");
if((IMG_Init(IMG_INIT_PNG)&IMG_INIT_PNG) != IMG_INIT_PNG)
printf("IMG_Init: %s\n", IMG_GetError());
else
printf("Fine!\n");
SDL_Surface* artworkSurface = IMG_Load(artworkPath);
if (artworkSurface == NULL)
{
printf("Error on loading PNG image\n");
return -1;
}
else
return 0;
}
加载 PNG 图像时出错 从未显示,因为它在加载过程中因分段错误而崩溃,知道吗?
解决方案
libpng 1.2.50 和 1.6.36 存在错误,无法正确加载图像。
SDL Image 库安装它自己的此类库的依赖项,correct/only 在 Raspberry Pi 上使用 SDL Image 的方法是从源代码编译 libpng 和 SDL 库。
所以,下载libpng16(来自GitHub)和SDL2_image-2.0.5(来自官方网站)源代码,编译(首先是 libpng)并安装它们。这样你就会在你的系统上找到 libpng 1.6.38.git 没有这个问题