我正在使用 Visual Studio 在 x64 Windows 10 计算机上构建 SDL 应用程序。
我已经按照 this 教程设置了包含/库/附加依赖项。
一切正常,直到我按照上面的示例添加 SDL_ttf 库作为指导,并将 SDL2_ttf.dll 粘贴到调试文件夹。
我收到此错误:
“应用程序无法正确启动(0xc000007b)。单击“确定”关闭应用程序。*
如果我从文件夹中删除 SDL2_ttf.dll,我会(仅)收到此错误:
我从this链接下载了.dll(x64版本)。
当我仅使用这些库时,我的可执行文件会运行,因此我的 SDL2.dll 和 SDL2_image.dll(均为 x64)可以正常工作。
这里有什么问题吗?为什么我会收到此错误?
我检查了system32文件夹(以及整个Windows父文件夹),但没有找到SDL_ttf.dll。
另外,这就是我的调试文件夹的样子:
//Using SDL and standard IO
#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include <SDL_ttf.h>
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Window* gWindow = nullptr;
SDL_Surface* gScreenSurface = nullptr;
bool init()
{
//Initialization flag
bool success = true;
IMG_Init(IMG_INIT_PNG);
TTF_Init();
//Initialize SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
//Create window
gWindow = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if (gWindow == NULL)
{
printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
success = false;
}
else
{
//Initialize PNG loading
int imgFlags = IMG_INIT_PNG;
if (!(IMG_Init(imgFlags) & imgFlags))
{
printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
success = false;
}
else
{
//Get window surface
gScreenSurface = SDL_GetWindowSurface(gWindow);
}
}
}
return success;
}
int main(int argc, char* args[])
{
init();
//Destroy window
SDL_DestroyWindow(gWindow);
//Quit SDL subsystems
SDL_Quit();
return 0;
}
编辑:整理代码
编辑:我知道为什么会看到这个问题。前几天我将一些库文件复制到我的 MinGW 文件夹中,并且我可能覆盖了 SDL2 使用的一些重要 dll 文件(在幕后)。如果我了解了它的底部,我会发布。同样,我可能会重新安装 MinGW,如果问题得到解决,我将发布更新。
编辑:我终于让它工作了。看起来我的 PATH 中有一个 dll 不适合我的 x64 应用程序,而且它不是我上面提到的 3 个 dll 中的任何一个。这就是我的工作文件夹的样子。
使用 MinGW 安装管理器全新安装 MinGW 后,程序开始给出不同的错误,指示缺少哪个 dll。 SDL 运行时库文件夹包含所有这些文件夹。我复制了它们的 x64 版本,应用程序运行成功。
自己学习如何使用 SDL, 我已经为此遇到了好几天的麻烦,尝试了许多不同的方法以使 SDL_image 和 SDL_ttf 正常工作。 遇到与您带到这里相同的错误,您帮助我最终理解并修复它。 非常感谢!