2012-11-17 96 views
4

我想在Windows桌面的Visual Studio Express 2012中安装SDL_ttf,并且我有一个编译好的小示例程序,但是当我运行它时,出现错误弹出窗口显示“应用程序无法正确启动(0xc000007b)。单击确定关闭应用程序”。试图在Visual Studio Express 2012中安装SDL_ttf for Windows Desktop

我最初得到基本的SDL工作,然后我试图添加SDL字体。我做了以下,但我仍然遇到麻烦,如果有人可以帮我出去,这将是非常感激...

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

2)我在项目中添加了SDL和SDL_ttf的include目录属性(在项目>>属性>>配置属性>> VC++目录>>包含目录下) ... 这些是(“... \ SDL主库\ SDL-1.2.15 \ include”) 和(“ ... \ SDL Font Libraries \ SDL_ttf-2.0.11 \ include“)

3)我添加了SDL和SDL_ttf的其他依赖关系(在Project >> Properties >> Configuration Properties >> Linker >> Input >> Aditional Dependencies中,我放入: SDL.lib SDLMain.lib SDL_ttf.lib 在线 - 它看起来像这样:SDL.lib; SDLMain.lib; SDL_ttf.lib;%(AdditionalDependencies)

4)我已经把下面的dll文件在同一文件夹作为我的.exe文件(这是视觉工作室2012 \项目\ ConsoleApplication2 \调试),这些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; 
} 
+0

我终于得到它的工作!我玩弄了各种dll和lib文件夹 - 我终于找到了它的工作原理(我可能会使用一些64位的lib或dll文件 - 我应该有一个32位的lib或dll文件文件 - 但我不确定。 – user1296259

回答

3

这个问题也许可以改名为“试图在Visual Studio 2012快速安装第三方库的Windows桌面”。尽管你的步骤有效,但它们并不是最优的,特别是如果你打算分享你的项目并与其他人一起工作!

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

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

图书馆 - 图书馆有两部分。首先,你需要告诉链接器在哪里寻找所需的库。做不是直接复制你的库在你的VC \ libs文件夹,而不是使用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的人会完全反对,但那是我经常见到的。它确保每个人都使用与代码相对应的库版本(例如,如果您升级到较新版本的库和界面已更改,如果您只更改源代码管理中的代码,则必须警告您其他团队成员手动升级到新库,就好像它在您的源代码管理中一样,同步将使它们与项目的代码和外部库保持同步)。

0

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

相关问题