我一直在尝试重新运行使用SDL2的旧c ++ eclipse项目,但尝试将我的系统重新创建到SDL2的工作点正在变得令人生气。此时我试图重新安装eclipse,mingw和sdl,尝试32位和64位版本,但没有组合工作。我认为这是我安装所有问题的方式的问题,这就是为什么我会过分明确我做了什么,但显然我不确定。 。如果您只关心SDL错误,请跳过下两段。
我使用的是Windows 7 64位计算机。我的第一直觉是从他们主站点的下载链接下载64位版本的Eclipse Neon for c ++。 因为我正在使用Windows 64,所以我在(https)sourceforge.net/projects/mingw-w64上获得了mingw的w64版本。它的安装程序有多个版本输入,所以我选择了7.1.0,x86_64,win32,seh和0选项。 我在eclipse c ++构建环境中包含了一个新mingw64文件夹的路径,并且我能够选择“mingw gcc'新项目中的工具链并成功运行新的helloworld项目。
然后我按照https://www.caveofprogramming.com/c-for-complete-beginners/setting-up-sdl-windows.html中的步骤尝试添加SDL2。我从libsdl下载页面获得了最新版本SDL 2.0.5,为MinGW 32/64位版本选择了开发库。然后我解压缩它,选择x86_64-w64-mingw32版本并将lib / include文件(包括cmake和pkgconfig子文件夹)从该文件夹移动到之前的新mingw64文件夹。
此时我在教程的第6步;我继续没有任何问题(在步骤17我添加相同的mingw32 / SDL2main / SDL2链接器:这是正确的吗?),一旦项目生成,将SDL2.dll从初始SDL2 \ bin文件夹添加到调试文件夹。但是,当我复制他的示例代码并使用调试器时,SDL_Init(SDL_INIT_EVERYTHING)发生错误;我无法介入。它不会在控制台looks like this in the debugger上输出任何内容,当我尝试恢复时程序停止工作并终止。没有错误代码或任何错误。
我发现的最相关的解决方案总是涉及到32位用于所有内容,但重复上述过程使用32位版本的上述结果会在同一位置出现相同的错误。我查看了SDL wiki并尝试了SDL_INIT的所有可能输入:当我尝试SDL_INIT_TIMER,SDL_INIT_JOYSTICK和SDL_INIT_GAMECONTROLLER时,它以相同的方式崩溃,但其他输入没有导致任何错误。我最终想要使用SDL_image和SDL_tff,就像我以前做过的项目一样,我知道我已经找到了一种让它无法重现的方法。
答案 0 :(得分:0)
您必须使用#include <SDL2/SDL.h>
才能使用sdl-2。
此外,我建议不要使用using namespace std;
,因为如果您的代码进一步发展会产生问题。其次,我强烈建议使用try-catch块来处理异常,在发生错误时没有它们,你将不知道它来自何处。
以下是一个例子:
#include <stdexcept>
try
{
if (SDL_Init(SDL_INIT_VIDEO) > 0)
{
throw(::std::runtime_error("SDL failed to initialise! ERROR: "));
}
}
catch (std::runtime_error const& msg)
{
printf("%s", msg.what());
if (SDL_GetError() != NULL)
{
printf("%s", SDL_GetError());
}
}
答案 1 :(得分:0)
非常不确定这是否是实际解决方案,但重新安装mingw与自定义选项7.1.0,x86_64,posix,sjlj和0使INIT_EVERYTHING工作没有崩溃并完全执行它应该如何。