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

时间:2012-11-17 18:22:53

标签: c++ visual-studio-2012 sdl sdl-ttf

我正在尝试在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)。 IIb)的

2)我在项目属性中添加了SDL和SDL_ttf的include目录(在Project>> Properties>> Configuration Properties>> VC ++ Directories>> Include Directories下) ... 那些是(“...... \ SDL主库\ SDL-1.2.15 \ include”) 和(“... \ SDL字体库\ SDL_ttf-2.0.11 \ include”)

3)我为SDL和SDL_ttf添加了我的附加依赖项(在项目>>属性>>配置属性>>链接器>>输入>>有条件依赖项下,我放置:     SDL.lib     SDLMain.lib     SDL_ttf.lib 内联 - 它看起来像这样:SDL.lib; SDLMain.lib; SDL_ttf.lib;%(AdditionalDependencies)

4)我已将以下dll文件放在与我的.exe文件(即Visual Studio 2012 \ Projects \ ConsoleApplication2 \ Debug)相同的文件夹中,这些dll文件是:    SDL_image.dll    libfreetype建立-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;
}

2 个答案:

答案 0 :(得分:4)

此问题可能会重命名为“尝试在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:\Projects\SDL\...这样的文件,你最终会对团队中每个成员存储项目的位置提出一些要求,就像你在{Where} ..\External\SDL\...使用{其他团队成员存储您的解决方案,它应该工作,只要他们在正确的相对文件夹中有正确的库。

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

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

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

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

答案 1 :(得分:0)

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