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常见问题解答
项目>>属性>>链接器>>高级>>入口点=主要和申请