我得到了错误的undefined reference to WinMain@16。为了节省空间,下面是指向项目中当前所有文件的链接。目前,除了创建一个窗口,填充绿色的窗口,然后在角落里画一个盒子,同时通过控制台跟踪我鼠标的位置,它不应该做太多的事情。但是,它不会构建,并且给了我前面提到的错误。
我的链接库是:
我在g++中使用代码块13.12,遵循C++11 ISO C++语言标准。我的电脑正在使用windows 10,以防与此相关。
我花了很长一段时间试图找到一个解决方案,似乎每个人都有一个完全不同的解决方案,到目前为止,他们都没有为我工作过。几个例子包括:
-lSDL2_image。main函数更改为WinMain。我也收到了同样的错误信息。Windows.h头。这没什么值得注意的。我还应该指出,用户、啦啦队和赫特提供的答案。- 这里可能就是我要找的东西,但老实说,我不能完全理解我在这个基础上应该做什么。
如果有任何相关的信息,我忘了包括,请告诉我,我会尽快这样做。提前谢谢。
发布于 2015-09-02 01:00:02
我想你想
#define SDL_MAIN_HANDLED在您的主文件中,行之前
#include <SDL2/SDL.h>解释:
在SDL / SDL2中,为了使某些类型的应用程序的跨平台开发变得更简单,SDL为应用程序创建了一个自定义的“入口点”。也就是说,您的int main()不是真正的主要内容。所发生的情况是,main被定义为similar中的宏,这将导致您的main被重命名为SDL_main或类似的宏。然后,在"SDL_main“库中定义一个不同的main,它将是应用程序的真正main。这个main只是以适合于平台的任何方式获取命令行参数,并调用您的main (改名为SDL_main)。
在windows上,对于您的应用程序是作为控制台程序启动还是作为gui程序iiuc启动,也存在一些差异。
有时候,您希望SDL为您做这些事情,但是如果您正在开发一个传统的控制台程序,通常不需要,所以您可以通过SDL这个SDL_MAIN_HANDLED定义,以防止做所有这些事情。
#undef main方法也会起作用,但它不太好,因为这样,您告诉SDL正在发生什么,使用另一种方法,SDL认为它的所有内容都将被使用,实际上,稍后您将使用#undef来粗略地禁用它。
如果您想查看各种宏/平台检查的详细信息,可以查看SDL_main.h头。如果您想知道SDL主系统的好处是什么,可以查看SDL文档。
发布于 2020-12-05 09:22:11
在接受的答案(未定义main、定义SDL_MAIN_HANDLED和所有这些)中建议的解决方案偏离了SDL2的使用方式。这是另一个问题,如果计划的方法是合理的,但我更愿意坚持到底。
此错误意味着您没有链接正确的库,或以错误的顺序链接它们。
您需要如下所示,按此顺序排列:-lmingw32 -lSDL2main -lSDL2。
这样做可能会将错误更改为undefined reference to `SDL_main'。这意味着您使用的main签名与SDL所期望的不同。一定是int main(int, char **)或int main(int, char *[])。添加参数名是允许的,但您不能更改其他任何内容:您必须拥有参数,即使您不使用它们。
https://stackoverflow.com/questions/32342285
复制相似问题