[英]Cross-compile SDL programs for Windows with MinGW on Linux in VS Code?
[英]How to cross-compile with SDL 2 from Linux for Windows
我尝试编译一个简单的C ++程序,它在我的Arch Linux(64位)上使用SDL 2和mingw-w64-g ++编译器。
为此,我从这里下载了SDL2-devel-2.0.4-mingw.tar.gz
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?
我做错了什么? :(
好的,这是因为主要功能签名,必须声明为:
int main(int argc, char *argv[])
根据官方SDL常见问题解答 :
确保将main()声明为:
#include "SDL.h" int main(int argc, char *argv[])
即使您正在创建Windows应用程序,也应该使用main()而不是WinMain(),因为SDL提供了一个版本的WinMain(),它在调用主代码之前执行一些SDL初始化。 如果由于某种原因你需要使用WinMain(),请查看src / main / win32 / SDL_main.c中的SDL源代码,看看你需要在WinMain()函数中做什么样的初始化,以便SDL工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.