我在SDL中迈出了第一步。 我想编译一个简单的测试类,只包括SDL2头,对于启动没什么特别的:
main.cpp中:
#include <SDL.h>
int main() {
return 0;
}
main.cpp本身编译正常:
g++ -c main.cpp -ISDL/include
但是只要我想用机器码main.o或直接将它与SDL2.dll链接,我就会收到此错误:
g++ main.cpp -o sdl_test -I SDL/include -L SDL/lib/x64 -l SDL2 -mwindows
g++ -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
来编译一个非控制台应用程序或其他没有成功的东西。
答案 0 :(得分:1)
当您使用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