2016-01-14 83 views
3

我试图编译一个简单的C++程序,该程序在我的Arch Linux(64位)上使用带有mingw-w64-g ++编译器的SDL 2。如何使用SDL 2从Linux for Windows进行交叉编译

为此,我下载了SDL2-devel的-2.0.4-mingw.tar.gz从here

prog.cpp:

#include <SDL.h> 

int main() 
{ 
    SDL_Init (SDL_INIT_VIDEO); 

    SDL_Window *sdlWnd = SDL_CreateWindow ("Test", SDL_WINDOWPOS_UNDEFINED, 
     SDL_WINDOWPOS_UNDEFINED, 800, 600, 0); 

    SDL_Event event; 
    bool running = true; 

    while (running) { 
     while (SDL_PollEvent (&event)) { 
      if (event.type == SDL_QUIT) { 
       running = false; 
       break; 
      } 
     } 
    } 

    return 0; 
} 

的Makefile:

GPP = x86_64-w64-mingw32-g++ 
prog.exe: prog.o 
    $(GPP) -o prog.exe prog.o -LSDL2-2.0.4/lib/x64 -lSDL2main -lSDL2 
prog.o: prog.cpp 
    $(GPP) -o prog.o -c -ISDL2-2.0.4/include prog.cpp 

现在正在给错误:

x86_64-w64-mingw32-g++ -o prog.exe prog.o -LSDL2-2.0.4/lib/x64 -lSDL2main -lSDL2 
Warning: corrupt .drectve at end of def file 
SDL2-2.0.4/lib/x64/SDL2main.lib(./x64/Release/SDL_windows_main.obj):(.text[main]+0x1c): undefined reference to `SDL_main' 

为什么对'SDL_main'的未定义引用?虽然我指定了-lSDL2main?

我做错了什么? :(

+0

的可能的复制[找不到sdl2main] (http://stackoverflow.com/questions/22739563/cannot-find-sdl2main) – Pierre

回答

1

好吧,这是因为主要功能特征,即都将被声明为:根据

int main(int argc, char *argv[]) 

official SDL FAQ

Make sure that you are declaring main() as:

#include "SDL.h" 

int main(int argc, char *argv[]) 

You should be using main() instead of WinMain() even though you are creating a Windows application, because SDL provides a version of WinMain() which performs some SDL initialization before calling your main code. If for some reason you need to use WinMain(), take a look at the SDL source code in src/main/win32/SDL_main.c to see what kind of initialization you need to do in your WinMain() function so that SDL works properly.