c++ - sdl_net 应用程序无法正确启动(0xc000007b)

标签 c++ sdl-2 sdl-net

我正在尝试编译并运行以下代码:

#include <iostream>
#include <SDL.h>
#include <SDL_net.h>
#include <cstring>


using namespace std;

int main(int argc, char **argv)
{
    printf("result of SDL_Init is: %i\n",SDL_Init(SDL_INIT_EVERYTHING));
    printf("result of SDLNet_Init is: %i\n",SDLNet_Init());
}

代码编译得很好,但是当我运行它时出现错误:

The application was unable to start correctly (0xc000007b). Click OK to close the application

我之前已经成功编译并运行了 SDL 代码,但这是我第一次尝试 SDL_Net。

我正在 Windows 上使用带有 MinGW GCC 编译器的 Code::Blocks,我正在使用用于 SDL 的 x86_64-w64-mingw32 库,这些是我的链接器设置(我知道其中一些并不是立即需要的) :

-lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf -lpthread -lSDL2_net

有人知道这是怎么回事吗?

//预计到达时间:

如何解决此问题而不将我的所有内容切换到 32 位?

谢谢

最佳答案

我通过以下方式解决了该问题:

  1. 安装了 mingw-w64 而不是 mingw32 并将其设置为我的编译器。我必须更改大多数工具链可执行文件,以便它们指向名称中带有“x86_64-w64-mingw32-”的文件(例如,“gcc.exe”更改为“x86_64-w64-mingw32-gcc.exe”) )。 Resource Compiler 和 Make 程序名称未更改。

  2. 使用 SDL_Net 开发库的 x86_x64-mingw32 文件夹中的二进制文件不起作用。我必须将它们替换为 SDL2_net-2.0.1-win32-x64 运行时二进制文件,您可以直接在 SDL_Net 主页上下载该二进制文件。

//注意:也许“i686-w64-mingw32”开发库二进制文件会起作用......我没有测试它。当“64”前面带有“86”和“686”时,我总是感到困惑,并且在这些开发库的情况下,另一个选项是“x86_64-w64-mingw32”....那么哪个是真正的x64,哪一个是x32?不确定。

  • 进行更改后,我不再在原始帖子中收到标题错误。相反,现在当我尝试运行编译后的程序时,我会收到有关缺少 DLL 的错误。此外,这些错误仅在我通过“调试”中的可执行文件运行程序时发生;当我通过按 Code::Blocks 中的“播放”按钮运行程序时,错误没有发生。经过一番寻找后,我通过将链接器选项更改为以下内容解决了这个问题:
  • -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_net -static-libgcc -static-libstdc++ -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic

    //注意:我实际上并不完全理解“-Wl,-Bstatic”和“-Wl,-Bdynamic”的作用。我希望有人能向我解释一下。

    我希望这对某人有帮助!

    关于c++ - sdl_net 应用程序无法正确启动(0xc000007b),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50416795/

    相关文章:

    c++ - 在 C 中定义的 C++ 中向前声明枚举

    c++ - 二维数组的 concurrent_vector

    c++ - 如何在 C++ 中实现内部抽象成员类?

    c++ - 返回指向同一个变量的指针会泄漏内存吗?

    SDL_net 2.0 多线程

    c++ - 当数字变得这么小时,long 会加倍舍入吗?

    window - SDL2 在不给它焦点的情况下升起一个窗口

    c++ - 为什么当我从初始化函数返回时我的 SDL 窗口关闭?

    c++ - 基于 TCP/IP 的 HTTP?