2015-09-01 45 views
2

我已经收到错误undefined reference to [email protected]。为节省空间,here's a link to all the files currently in the project。目前,除了创建一个窗口之外,它不应该做太多的事情,只需将其填充为绿色,然后在角落画一个盒子,同时通过控制台跟踪鼠标的位置。但是,它不会构建,我会得到上述错误。未定义引用WinMain @ 16 C++,SDL-2

我的链接库:

  • glew32s
  • libSDL2main
  • 的mingw32
  • libSDL2
  • opengl32
  • glew32

我使用码块s 13.12,g ++遵循C++ 11 ISO C++语言标准。我的电脑使用Windows 10以防万一。

我花了很长时间试图找到一个解决方案,似乎每个人都有一个完全不同的,到目前为止,他们都没有为我工作。一些例子包括:

  • 根据this similar question将SDL2_image添加到我的链接库中。它给了我错误-lSDL2_image
  • 从一开始就完全从头开始项目,以防我发现某些错字是原因。 (我得到了完全相同的错误)。
  • 将我的main函数更改为WinMain。我得到了同样的错误信息。
  • 添加Windows.h标题。这没有什么明显的。
  • 各种据称“正确的命令”为我的利库图书馆。这些似乎迄今没有任何帮助。

我还应该指出,答案由用户提供,干杯和hth。 - Alf,here可能是我正在寻找的东西,但在所有的诚实中,我无法完全理解我应该在此基础上做什么。

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

+0

可能的重复http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-doi-i-fix –

+1

尝试'#undef主'在main.cpp开头 – Poriferous

回答

3

我想你想

#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这个SDL_MAIN_HANDLED定义以防止所有这些东西。

#undef main方法也可以工作,但它不是很好,因为这样,您告诉SDL发生了什么事,用另一种方法,SDL认为它的所有内容都将被使用,事实上,您会粗暴地稍后用#undef将其禁用。

如果您想查看各种宏/平台检查的详细信息,可以查看SDL_main.h标题。如果您想知道SDL主系统的优点,可以查看SDL文档。

+0

这摆脱了错误。谢谢。如果你不介意我问,为什么/如何解决这个问题? –

相关问题