我一直收到错误 undefined reference to WinMain@16
。为了节省空间,here's a link to all the files currently in the project .目前,除了创建一个窗口、将其填充为绿色然后在角落绘制一个框外,它应该做的不多,同时通过控制台跟踪鼠标的位置。但是,它不会构建,并且出现上述错误。
我的链接器库是:
- glew32s
- libSDL2main
- mingw32
- libSDL2
- opengl32
- glew32
我正在使用 Codeblocks 13.12 和 g++,遵循 C++11 ISO C++ 语言标准。如果相关的话,我的电脑使用的是 Windows 10。
我花了很长时间试图找到一个解决方案,似乎每个人都有一个完全不同的解决方案,到目前为止,没有一个对我有用。一些示例包括:
- 根据 this similar question 将 SDL2_image 添加到我的链接库中.它给了我错误
-lSDL2_image
。 - 完全从头开始这个项目,以防万一我没有注意到的错字是原因。 (我得到了完全相同的错误)。
- 将我的
main
函数更改为WinMain
。我收到了同样的错误消息。 - 添加一个
Windows.h
header 。这没有引起任何注意。 - 我喜欢的图书馆的各种所谓的“正确命令”。到目前为止,这些似乎都没有帮助。
我还应该指出用户提供的答案,干杯和 hth。 - 阿尔夫,here可能是我正在寻找的东西,但老实说,我不能完全理解基于它我应该做什么。
如果我忘记包含任何相关信息,请告诉我,我会尽快这样做。提前致谢。
最佳答案
我觉得你想要
#define SDL_MAIN_HANDLED
在你的主文件中,行之前
#include <SDL2/SDL.h>
解释:
在 SDL/SDL2 中,为了尝试简化某些类型应用程序的跨平台开发,SDL 为您的应用程序创建了自定义“入口点”。也就是说,您的int main()
不是真正的 main。发生的情况是,main
被定义为 SDL header 中的宏,这导致您的 main 被重命名为 SDL_main
或类似名称。然后,在“SDL_main”库中定义了一个不同的main
,它将成为您应用程序的真正main
。此 main
只是以适合平台的任何方式获取命令行参数,并调用您的 main
(已重命名为 SDL_main
)。
在 Windows 上,关于您的应用程序是作为控制台程序启动还是作为 gui 程序启动,也存在一些差异,iiuc。
有时您希望 SDL 为您做这些事情,但如果您正在开发传统的控制台程序,通常您不会这样做。因此,您将此 SDL_MAIN_HANDLED
定义传递给 SDL,以防止执行所有这些操作。
#undef main
方法也可以工作,但它不是很好,因为通过这种方式,您告诉 SDL 发生了什么,而使用另一种方法,SDL 认为它的所有内容都在进行被使用,实际上你稍后使用 #undef
粗暴地禁用它。
如果您想查看各种宏/平台检查的详细信息,您可以查看 SDL_main.h
header 。如果您想了解SDL主系统的优势,可以查看SDL文档。
关于c++ - 对 WinMain@16 C++、SDL-2 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342285/