无法使用MinGW和SDL进行链接:对WinMain @ 16的未定义引用

时间:2016-07-22 16:27:00

标签: mingw sdl-2

我没有获得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\x64i686-w64-mingw32\lib文件夹中的所有内容复制到C:\MinGW\lib文件夹。

缺少什么?在命令行,也许。

我确实查看了两个类似错误的主题:

Undefined reference to WinMain@16 when using SDL - 这样做

undefined reference to WinMain@16 C++, SDL-2 - 没效果

1 个答案:

答案 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在它之前。

来自SDL FAQ for windows

  

你应该使用main()而不是WinMain(),即使你是   创建Windows应用程序,因为SDL提供了一个版本   WinMain()在调用之前执行一些SDL初始化   主要代码。如果由于某种原因你需要使用WinMain(),看一看   在src / main / win32 / SDL_main.c中的SDL源代码中看看是什么类型的   你需要在你的WinMain()函数中做的初始化   SDL正常工作。

如果有任何库可以使用 sdl2-config ,我至少会检查它输出的内容。