【问题标题】:SDL2: IMG_Load() - Segmentation fault on Raspberry PiSDL2:IMG_Load() - Raspberry Pi 上的分段错误
【发布时间】: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


【解决方案1】:

解决方案

libpng 1.2.50 和 1.6.36 上存在阻止正确加载图像的错误。

SDL Image 库安装它自己的此类库的依赖项,在 Raspberry Pi 上使用 SDL Image 的正确/唯一方法是从源代码编译 libpng 和 SDL 库。

所以,下载libpng16(来自GitHub)和SDL2_image-2.0.5(来自官方网站)源代码,编译(首先是libpng)并安装它们。这样你会在你的系统上发现libpng 1.6.38.git 没有这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多