对本机环境中使用 SDL 编译进行'WinMain'的未定义引用

undefined reference to 'WinMain' with SDL compiling in a native enviroment

本文关键字:WinMain 引用 未定义 环境 本机 编译 SDL      更新时间:2023-10-16

我正在努力学习SDL的第一步。我想编译一个简单的测试类,只包括SDL2头文件,对于启动没有什么特别的:

main.cpp:

#include <SDL.h>
int main() {
    return 0;
}

main.cpp本身编译得很好:g++ -c main.cpp -ISDL/include

,但只要我想链接它与SDL2.dll或与机器码主。或者直接,我得到这个错误:g++ main.cpp -o sdl_test -I SDL/include -L SDL/lib/x64 -l SDL2 -mwindowsg++ -o test main.o -L SDL/lib/x64 -l SDL2 -mwindows

/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/libcygwin.a(libcmain.o): In function `main':
/usr/src/debug/cygwin-1.7.30-1/winsup/cygwin/lib/libcmain.c:39: undefined reference to `WinMain'
/usr/src/debug/cygwin-1.7.30-1/winsup/cygwin/lib/libcmain.c:39:(.text.startup+0x7e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: Fehler: ld gab 1 als Ende-Status zurück

附加信息:我使用Cygwin和g++来编译我的c++代码。我的操作系统是Windows 7 Professional 64Bit SP 1.

我用谷歌搜索了几个小时,但我遇到的所有结果都说使用-mwindows来编译一个非控制台应用程序或其他无法工作的东西。

当你使用SDL时,你的main()必须看起来像int main(int, char **)(或int main(int argc, char **argv))。

为什么?因为在SDL代码的某个地方你可以找到

int SDL_main(int, char **);
int main(int argc, char **argv)
{
    /*Some stuff.*/
    SDL_main(argc, argv);
    /*Some stuff.*/
}

然后,在SDL.h内:

#define main SDL_main