我尝试在 Arch Linux(64 位)上使用 SDL 2 和 mingw-w64-g++ 编译器编译一个简单的 C++ 程序。
为此,我从以下位置下载了 SDL2-devel-2.0.4-mingw.tar.gzhere https://www.libsdl.org/download-2.0.php
程序.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;
}
生成文件:
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
现在make给出了错误:
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 ?
我做错了什么? :(
好的,这是因为 main 函数签名,必须声明为:
int main(int argc, char *argv[])
根据SDL 官方常见问题解答 https://wiki.libsdl.org/FAQWindows#I_get_.22Undefined_reference_to_.27SDL_main.27.22_...:
确保将 main() 声明为:
#include "SDL.h"
int main(int argc, char *argv[])
您应该使用 main() 而不是 WinMain(),即使您是
创建 Windows 应用程序,因为 SDL 提供了一个版本
WinMain() 在调用之前执行一些 SDL 初始化
主要代码。如果由于某种原因你需要使用 WinMain(),请看一下
查看src/main/win32/SDL_main.c中的SDL源代码,看看是什么样的
您需要在 WinMain() 函数中进行初始化,以便
SDL 工作正常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)