我没有获得MinGW的g ++来成功编译SDL程序。这是我的示例程序:
#include <SDL.h>
int main( int argc, char* args[] )
{
SDL_Init( SDL_INIT_VIDEO );
SDL_Quit();
return 0;
}
这是我的命令和错误报告:
C:\Users\briggs_w\Desktop\testSDL>g++ test.cc -IC:\MinGW\include\SDL
-LC:\MinGW\lib -lSDL2 -lSDL2main -lmingw32
C:\MinGW\lib/libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
我将SDL2的lib\x64
和i686-w64-mingw32\lib
文件夹中的所有内容复制到C:\MinGW\lib
文件夹。
缺少什么?在命令行,也许。
我确实查看了两个类似错误的主题:
答案 0 :(得分:0)
我编译了你的代码,以便编译器和链接器标志由sdl2-config
提供(包含在msys2包中):
gcc -O -Wall test.cpp `sdl2-config --cflags --libs`
$ sdl2-config --cflags
-I / mingw64 / include / SDL2 -Dmain = SDL_main
$ sdl2-config --libs
-L / mingw64 / lib -lmingw32 -lSDL2main -lSDL2 -mwindows
因此,至少-lmingw32
处于要链接的库中的其他位置,并且-Dmain=SDL_main
也丢失了。库SDL2main是一个静态库,因此在链接时需要mingw32在它之前。
你应该使用main()而不是WinMain(),即使你是 创建Windows应用程序,因为SDL提供了一个版本 WinMain()在调用之前执行一些SDL初始化 主要代码。如果由于某种原因你需要使用WinMain(),看一看 在src / main / win32 / SDL_main.c中的SDL源代码中看看是什么类型的 你需要在你的WinMain()函数中做的初始化 SDL正常工作。
如果有任何库可以使用 sdl2-config ,我至少会检查它输出的内容。