【发布时间】:2020-10-02 14:25:34
【问题描述】:
这个在 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 图像时出错从未显示,因为它在加载时因分段错误而崩溃,知道吗?
【问题讨论】:
-
你应该检查
IMG_Init是否成功。 -
只是猜测,检查
./testfile.png是否真的是一个有效的PNG文件。 -
更改了打开示例代码,IMG_Init 工作正常(打印好了)。 PNG 是有效的,否则它在 Ubuntu 上不起作用
-
好的,我发现了系统之间的差异。在 Ubuntu(不是 ARM)中有 libpng 1.6.34 并且它可以工作。在 Raspberry Pi v1 中有 libpng 1.6.36,它显示有关 IHDR 数据的错误(不加载图像)但它不会崩溃。在 Raspberry Pi v3 上有 libpng 1.2.50,它会因分段错误而崩溃
标签: c arm raspberry-pi3 sdl-2 sdl-image