【问题标题】:undefined reference to WinMain@16 C++, SDL-2未定义对 WinMain@16 C++、SDL-2 的引用
【发布时间】:2015-11-27 07:41:01
【问题描述】:

我收到了错误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 标头。这没有什么明显的效果。
  • 我喜欢的图书馆的各种所谓的“正确的命令”。到目前为止,这些似乎都没有帮助。

我还应该指出,用户提供的答案,Cheers and hth。 - Alf,here 可能是我正在寻找的东西,但老实说,我无法完全理解基于它我应该做什么。

如果我忘记包含任何相关信息,请告诉我,我会尽快提供。提前致谢。

【问题讨论】:

标签: c++ c++11 codeblocks sdl-2 winmain


【解决方案1】:

我想你想要

#define SDL_MAIN_HANDLED

在你的主文件中,行前

#include <SDL2/SDL.h>

解释:

在 SDL / SDL2 中,为了尝试简化某些类型应用程序的跨平台开发,SDL 为您的应用程序创建了一个自定义“入口点”。也就是说,您的 int main() 不是 真正的 主。发生的情况是,main 被定义为 SDL 标头中的宏,这会导致您的 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 标头。如果想了解 SDL 主系统有哪些好处,可以查看 SDL 文档。

【讨论】:

  • 这消除了错误。谢谢。如果您不介意我问,为什么/如何解决这个问题?
【解决方案2】:

接受的答案中建议的解决方案(取消定义 main,定义 SDL_MAIN_HANDLED 等等)偏离了 SDL2 的预期使用方式。这是另一个问题,如果预期的方法是合理的,但我更愿意坚持下去。


此错误表示您没有链接正确的库,或者链接顺序错误。
您需要按照以下确切顺序关注:-lmingw32 -lSDL2main -lSDL2

这样做可能会将错误更改为undefined reference to `SDL_main'。这意味着您使用的 main 的签名与 SDL 的预期不同。它必须是 int main(int, char **)int main(int, char *[])。允许添加参数名称,但您不能更改任何其他内容:您必须有参数,即使您不使用它们。

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2013-01-15
    相关资源
    最近更新 更多