我一直在尝试重新运行一个使用 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,而且我知道我想出了一种方法让它工作但我无法重现。
最佳答案
您必须使用 #include <SDL2/SDL.h>
使用sdl-2 .
此外,我建议不要使用 using namespace std;
因为如果您的代码进一步发展,它会产生问题。其次,我强烈建议使用 try-catch block 来处理异常,如果没有它们,当发生错误时,您将不知道错误来自何处。
这是一个例子:
#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());
}
}
关于c++ - 使用 eclipse 和 mingw 设置 SDL2 : SDL_INIT crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43838439/