SDL2:LNK1561:必须定义入口点

我想编译这段代码:

#include  int main(int argc, char* argv[]) { return 0; } 

但它无法链接: Error 1 error LNK1561: entry point must be defined

这个库里有一些奇怪的代码: http : //hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h

 #define main SDL_main 

SDL2.lib;SDL2main.lib添加到Project Settings => Linker => Input。

我该怎么做才能运行这个项目?
VS 2012 SP3,空C ++项目。

根据Dream.In.Code上的这个post:

右键单击项目名称 – >属性 – >展开链接器选项卡 – >系统 – >子系统:确保它是Console (/SUBSYSTEM:CONSOLE)

或者,如果要隐藏控制台窗口或正在调试multithreading应用程序 ,则应将SubSystem设置为Window (/SUBSYSTEM:WINDOW)

我发现设置/ SUBSYSTEM:CONSOLE只是解决方案的一半。 下半部分是将SDL_MAIN_HANDLED添加到您的其他定义中。 我用来解决这个问题的线索可以在SDL_main.h中找到。 设置SDL_MAIN_HANDLED告诉您已经提供main函数的SDL头文件,并且不希望它重新定义自己的入口点。

正如tinky_winki所写

右键单击项目名称 – >属性 – >展开链接器选项卡 – >系统 – >子系统:确保它是控制台(/ SUBSYSTEM:CONSOLE)

但是,如果您不希望带窗口的控制台,只需使用/ SUBSYSTEM:WINDOWS

不要 #undef main ! 虽然在SDL方面重新定义它是一个非常糟糕的做法,但它们有充分的理由: WinMain在库侧定义并用于运行一些初始化代码,有助于解决兼容性问题。 (当使用不同的SDL实现时,甚至更多,如Steam或移植到其他平台,如Android)

那你该怎么办? 在Windows上,您应始终在SDL2main.lib之前包含SDL2main.lib ,并确保您的main采用以下格式:

 int main(int argc, char* argv[]) // CORRECT void main(int argc, char* argv[]) // WRONG int main(int, char**) // MAY BE CORRECT 

来源: SDL2 Windows常见问题解答

项目>>属性>>链接器>>高级>>入口点=主要和申请