使用Netbeans与Cygwin和SDL,包括SDL.h创build奇怪的错误

我有Netbeans C / C ++设置,Cygwin安装,configuration和正确运行。 使用Cygwinterminal从源安装SDL。 我已经确认Cygwin,Netbeans和SDL都运行正常,我可以使用Netbeans编写和编译C ++项目,Netbeans可以在不需要包含任何文件或任何东西的情况下查看SDL,它只是像缺省库一样工作。

#include <cstdlib> #include <sdl2/SDL.h> using namespace std; int main(int argc, char** argv) { return 0; } 

这就是我正在编译的代码,Netbeans没有突出显示包含sdl.h,但是当我去build立我得到这个:

 "/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf make[1]: Entering directory '/home/Cally/Projects/Test' "/usr/bin/make" -f nbproject/Makefile-Debug.mk dist/Debug/Cygwin_4.x-Windows/test.exe make[2]: Entering directory '/home/Cally/Projects/Test' mkdir -p build/Debug/Cygwin_4.x-Windows rm -f "build/Debug/Cygwin_4.x-Windows/main.od" g++ -c -g -MMD -MP -MF "build/Debug/Cygwin_4.x-Windows/main.od" -o build/Debug/Cygwin_4.x-Windows/main.o main.cpp mkdir -p dist/Debug/Cygwin_4.x-Windows g++ -o dist/Debug/Cygwin_4.x-Windows/test build/Debug/Cygwin_4.x-Windows/main.o /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: error: ld returned 1 exit status nbproject/Makefile-Debug.mk:62: recipe for target 'dist/Debug/Cygwin_4.x-Windows/test.exe' failed make[2]: *** [dist/Debug/Cygwin_4.x-Windows/test.exe] Error 1 make[2]: Leaving directory '/home/Cally/Projects/Test' nbproject/Makefile-Debug.mk:59: recipe for target '.build-conf' failed make[1]: *** [.build-conf] Error 2 make[1]: Leaving directory '/home/Cally/Projects/Test' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed make: *** [.build-impl] Error 2 BUILD FAILED (exit value 2, total time: 1s) 

当我不包含SDL时,构build成功。 有人知道我在做什么错了吗?

Solutions Collecting From Web of "使用Netbeans与Cygwin和SDL,包括SDL.h创build奇怪的错误"

错误信息看起来真的很糟糕 – 但它只是告诉你它找不到一个WinMain

这是SDL的一个已知问题。 请将这些库添加到您的链接器( 命令是强制性的! ):

  1. mingw32
  2. SDLmain
  3. SDL

您可以将-lmingw32 -lSDLmain -lSDL添加到链接器选项,或者通过链接器配置的库菜单添加它们。

您可能还需要SDL_mixer – 如果是这样,请最后添加它。

请参阅: http : //content.gpwiki.org/index.php/SDL%3aTutorials%3aSetup


作为一个“肮脏的解决方法”,你可以这样做:undefine main

SDL重新定义了main()作为一个宏的一些额外的东西。 你可以通过egl来验证。 Ctrl +点击主/去声明/定义或检查是否格式化为makro。

 #include <cstdlib> #include <sdl2/SDL.h> using namespace std; /* * If 'main' is defined we clear that definition * to get our default 'main' function back. */ #ifdef main # undef main #endif /* main */ int main(int argc, char** argv) { return 0; } 

请参阅SDL_main.hSDL_main.h (第103+行)。