c-SDL应用程序退出而不进入main-SDL Image



我有一个应用程序,它在Ubuntu上运行良好,但在Windows上启动时立即退出,没有任何错误。

似乎没有输入main((函数。

应用程序已编译无错误,并且使用SDL_image.h。当(在同一应用程序中(使用SDL-image的代码不存在时,应用程序运行良好。

在.exe目录中,有所有需要的dll,SDL2.dll、libjpeg-9.dll、libpng16-16.dll、libtiff-5.dll、libwebp-7.dll、SDL2_image.dll和zlib1.dll

IMG_Init((以这种方式在任何其他图像函数之前调用:

(IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG)

而且,正如我之前所说,这个应用程序在Ubuntu上运行时没有问题。

这是一个可重复的例子

此代码有效:

生成文件

CC = gcc -fno-pie -no-pie -m32
CFLAGS = -IC:/sdl2/include -O0 -ggdb
LIBS = -LC:/sdl2/lib/x86 -lSDL2main -lSDL2
all:
$(CC) $(CFLAGS) main.c $(LIBS) -o application.exe

main.c

#include <stdio.h>
#include "SDL.h"

int main(int argc, char **argv)
{
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
{
SDL_Log("SDL fails to initialize video subsystem!n%s", SDL_GetError());
return -1;
}
else
printf("SDL Video was initialized fine!n");
return 0;
}

这段代码,我使用SDL图像库,什么都不做,没有错误,立即退出:

生成文件

CC = gcc -fno-pie -no-pie -m32
CFLAGS = -IC:/sdl2/include -IC:/sdl2_image/include -O0 -ggdb
LIBS = -LC:/sdl2/lib/x86 -LC:/sdl2_image/lib/x86 -lSDL2main -lSDL2 -lSDL2_image
all:
$(CC) $(CFLAGS) main.c $(LIBS) -o application.exe

main.c

#include <stdio.h>
#include "SDL.h"
#include "SDL_image.h"

int main(int argc, char **argv)
{
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
{
SDL_Log("SDL fails to initialize video subsystem!n%s", SDL_GetError());
return -1;
}
else
printf("SDL Video was initialized fine!n");
if((IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG)
{
SDL_Log("SDL fails to initialize image handler!n%s", IMG_GetError());
return -1;
}
else
printf("SDL Image was initialized fine!n");
return 0;
}

正如我之前所说,问题似乎出在windows库(或环境(上,这就是为什么我没有在之前添加可复制代码

两天后,我找到了解决方案。

首先(但这不是我的问题(SDL图像库不是那么";"聪明";因此,存在SDL2_image.dll库以及来自libjpeg-9.dll、libpng16-16.dll、libtiff-5.dll、libwebp-7.dll和zlib1.dll的已使用库是很重要的。若缺少所需的库之一,则不会收到任何错误。

我的环境出现了问题,在这台机器上我使用了Visual Studio和Eclipse。我犯了一个错误,我的makefile指向VisualStudioSDL库,而不是MinGW库。

我不知道为什么,但第一个可复制的例子也能很好地处理这个错误(并且没有-lmingh32(,所以它为我指明了正确的方法。

我在makefile上做了这个更改,现在它起作用了:

CFLAGS = -IC:/sdl2_mingw/i686-w64-mingw32/include/SDL2 -IC:/sdl2_image_mingw/i686-w64-mingw32/include/SDL2 -O0 -ggdb
LIBS = -lmingw32 -LC:/sdl2_mingw/i686-w64-mingw32/lib -LC:/sdl2_image_mingw/i686-w64-mingw32/lib -lSDL2main -lSDL2 -lSDL2_image

最新更新