c++ - 使用 eclipse 和 mingw 设置 SDL2 : SDL_INIT crash

标签 c++ windows eclipse mingw sdl-2

我一直在尝试重新运行一个使用 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>使用 .

此外,我建议不要使用 using namespace std;因为如果您的代码进一步发展,它会产生问题。其次,我强烈建议使用 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/

相关文章:

c++ - 使用 C++ 读取 1、8 或 24 位 BMP 文件

c++ - 代码输出说明

windows - 如何找到其他进程

c# - 如何终止在 C# 中的 foreach 循环中启动的线程

java - 错误 : Element q not found. ..Eclipse 中的 SeleniumRC...提供了堆栈跟踪和代码..请解决?

java - 这个错误有什么解决办法吗?

c++ - 有没有办法找到导致 Qt 中出现警告的行?

c++ - 在不同语言的程序之间共享变量的事实标准是什么?

c# - 在调用 InitiateSystemShutdownEX 后,如何检测将来是否安排重启?

java - 无法在 Windows 7 上为 Eclipse 项目运行 vertx 模块