SDL.h“程序文件不存在”

时间:2016-04-09 23:00:09

标签: eclipse sdl mingw32

我对c ++(以及一般的编程)很陌生,我现在正试图将“SDL.h”标题包含在Eclipse中的c ++项目中(我使用minGW btw)。我已经为项目提供了头文件和SDL库的路径。但是,当我特意包含“SDL.h”和构建然后项目时,我得到以下消息:

“'启动SDL Basic.exe'遇到问题。程序文件不存在。”

我很确定这与每当我使用SDL.h构建项目时都没有生成.exe文件这一事实有关。我没有得到的是为什么会发生这种情况。当我包含一些其他SDL标头时,例如SDL_assert,这不是问题。然后像往常一样生成.exe文件,程序就像应该的那样运行。[在此输入图像描述] [1]

http://i.stack.imgur.com/cdV8U.jpg包含SDL.h时的外观。

http://i.stack.imgur.com/MW7PX.jpg包含SDL中的其他内容时的外观。

2 个答案:

答案 0 :(得分:0)

我似乎已经解决了这个问题。每当我运行程序时,控制台窗口就会外出"未定义引用' Winmain @ 16' &#34 ;.所以我搜索了它,发现SDL在SDL_main.h中定义了自己的主要功能,总共会给我两个主要功能。为了防止SDL定义自己的主函数,我必须在包含SDL.h之前定义宏SDL_MAIN_HANDLED,看起来,它有效:

http://i.stack.imgur.com/mNOOE.jpg

如果有人可以更详细地解释这一点,我真的很感激。

答案 1 :(得分:0)

我做了一些研究,看起来对WinMain @ 16的未定义引用是因为SDL自动为您的应用程序创建Windows入口点,但是您没有提供必要的库来链接SDL的实现入口点。但是,如果您打算使用SDL功能,那么您确实需要该入口点,因为它执行了几个重要的初始化步骤,以利用您可能想要使用的SDL功能。

定义SDL_MAIN_HANDLED是一种允许您提供自己的Windows入口点(即:WinMain)的机制,但这是一种更复杂的方法(尽管更灵活)。这只能解决您的问题,因为它会阻止“main”被重新定义为“SDL_main”,这反过来意味着您的.cpp文件甚至不再需要任何SDL库。所以它编译和链接,但你不会有任何你正在寻找的SDL功能。

您需要链接相应的库。请参阅here - 它提供了一些可能有用的信息。