2012-11-17 137 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

相關問題