尝试在 Visual Studio Express 2012 for Windows Desktop 中安装 SDL_t

Trying to install SDL_ttf in Visual Studio Express 2012 for Windows Desktop

本文关键字:Desktop 安装 SDL Windows for Visual Studio 2012 Express      更新时间:2023-10-16

我正在尝试在Visual Studio Express 2012 for Windows Desktop中安装SDL_ttf,我有一个编译良好的小示例程序,但是当我运行它时,我收到一个错误弹出窗口,上面写着"应用程序无法正确启动(0xc000007b)。单击"确定"关闭应用程序"。

我最初让基本的 SDL 工作,然后我尝试添加 SDL 字体。我已经做了以下工作,但我仍然遇到麻烦,如果有人能把我赶出去,将不胜感激......

1)我将所有.lib文件夹复制到Visual Studio lib文件夹(C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib)(它们是SDL.lib,SDLMain.lib和SDL_ttf.lib)

2) 我在项目属性中添加了 SDL 和SDL_ttf的包含目录(在项目>>属性>>配置属性下>> VC++ 目录>>包含目录) ... 它们是("...\SDL 主库\SDL-1.2.15\include") 和("...\SDL 字体库\SDL_ttf-2.0.11\include")

3) 我添加了 SDL 和 SDL_ttf 的其他依赖项(在 Linker>> Linker>>>>>>其他依赖项配置属性>>下,我在其中放置: SDL.lib SDLMain.lib SDL_ttf.lib 内联 - 它看起来像这样:SDL.lib;SDLMain.lib;SDL_ttf.lib;%(ExtraalDependencies)

4)我已将以下dll文件放在与我的.exe文件(Visual Studio 2012\Projects\ConsoleApplication2\Debug)相同的文件夹中,这些dll文件是: SDL_image.dll 自由型-6.dll SDL_ttf.dll zlib1.dll SDL.dll

这是我的小示例程序源代码:

#include <iostream>
#include <SDL.h>
#include <SDL_ttf.h>
using namespace std;
int main(int argc, char** argv){
int retval = 0;
int sdlState = -1;
if((sdlState = SDL_Init(SDL_INIT_EVERYTHING)) == -1){
cerr << "SDL failed to initialize";
retval = 1;
}
SDL_Surface* screen = nullptr;
if(retval == 0){
if(nullptr == (screen =
SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_ASYNCBLIT)))
{
cerr << "Screen failed to be created";
retval = 1;
}
}
int ttfState = -1;
if(retval == 0){
if((ttfState = TTF_Init()) == -1){
cerr << "True Type Font failed to initialize";
retval = 1;
}
}
if(retval == 0){
//TTF_Font* font = TTF_OpenFont("air.ttf", 32);
SDL_Color txtColor = {0, 0, 0};
//SDL_Surface* text = TTF_RenderText_Solid(font, "Hello World",
//txtColor);
while(1){
SDL_FillRect(screen, NULL,
SDL_MapRGB(screen->format, 255, 255, 150));
//SDL_BlitSurface(text, NULL, screen, NULL);
SDL_Flip(screen);
}
}
if(ttfState != -1) TTF_Quit();
if(sdlState != -1) SDL_Quit();
return retval;
}

这个问题可能可以重命名为"尝试在Visual Studio Express 2012 for Windows Desktop中安装第三方库"。虽然您的步骤有效,但它们在某种程度上不是最佳的,特别是如果您打算共享您的项目并与他人合作!

基本上,这些类型的库带有 3 种主要文件类型、标头二进制文件。以下是有关如何改进项目的一些提示:

标头- 这些文件定义您与库的接口。通常,要让Visual Studio知道他们的位置,首选方法是进入您的Project Settings > Configuration Properties > C/C++ > General > Additional Include Directories。如果你想与某人共享你的项目(可能通过像Perforce,Git或SVN这样的源代码控制),你应该使用Relative Paths而不是Absolute Paths。我的意思是,如果您直接针对像C:ProjectsSDL...这样的文件,您最终会为团队中的每个成员提出一些关于存储项目位置的要求,就像您在其他团队成员存储解决方案的任何地方使用..ExternalSDL...之类的东西,只要他们在正确的相对文件夹中具有正确的库,它就应该可以工作。

- 库有两个部分。首先,您需要告诉链接器在何处查找所需的库。不要直接在 VC\libs 文件夹中复制库,而要使用Project Settings > Configuration Properties > Linker > General > Additional Library Directories。有关相对文件夹的相同规则适用于此处。然后,您需要告诉链接器要使用哪些库,这是通过列出所需的所有.lib文件(例如SDL.libSDLmain.libSDL_ttf.libProject Settings > Configuration Properties > Linker > Input > Additional Dependencies来完成的。

二进制文件 - 此处的二进制文件将是您需要.dll文件。一个简单的选择是简单地将它们手动复制到您的输出文件夹(请记住,您可以有多个Configuration,而不仅仅是Debug)。 否则,您可以通过一些自动为您复制它们的Post-Build步骤来自动化该过程。

对于所有这些设置,请考虑Project Properties窗口默认面向单个配置!若要将更改应用于每个配置,请在顶部可能显示"Active(Debug)"的下拉列表中选择All Configurations,然后更改设置。它们将应用于项目中的每个配置。

编辑:此外,对于共享项目,根据项目背后的心态,您可能希望在源代码管理中包含外部库。我知道Linux的人会完全反对这一点,但这是我经常看到的。它确保每个人都在使用与代码对应的库版本(例如,如果您升级到较新版本的库并且界面已更改,如果您只更改源代码管理上的代码,则必须警告其他团队成员手动升级到新库, 就像它在源代码管理上一样,同步会使它们与项目代码和外部库保持同步)。

是的,我发现这一切都是为了弄乱链接器.. 我没有将其链接到 x86 我只是将其链接到 SDL_ttf 和 SDL 中的 lib 文件夹...这也与您下载的扩展程序的版本有关。确保它们都相同。例如 1.2 与 1.2 和 2.0 与 2.0