4

Windows デスクトップ用の Visual Studio Express 2012 に SDL_ttf をインストールしようとしていますが、問題なくコンパイルできる小さなサンプル プログラムがありますが、それを実行すると、「アプリケーションを正しく起動できませんでした (0xc000007b)」というエラー ポップアップが表示されます。 [OK] をクリックしてアプリケーションを閉じます。」

私はもともと基本的な 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 Main Libraries\SDL -1.2.15\include") および ("...\SDL Font Libraries\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;
}
4

2 に答える 2

4

この質問は、おそらく「Windows デスクトップ用の Visual Studio Express 2012 にサードパーティ ライブラリをインストールしようとしています」という名前に変更される可能性があります。あなたの手順は機能しますが、特にプロジェクトを共有して他のユーザーと作業する予定がある場合は、多少最適ではありません!

基本的に、これらの種類のライブラリには、ヘッダーライブラリ、およびバイナリの 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\...場合、他のチーム メンバーがソリューションを保存する場所のようなものを使用するかのように、適切な相対フォルダーに適切なライブラリがある限り、機能します。

ライブラリ- ライブラリには 2 つの部分があります。まず、必要なライブラリを探す場所をリンカに伝える必要があります。libs を VC\libs フォルダーに直接コピーしないでください。代わりにProject Settings > Configuration Properties > Linker > General > Additional Library Directories. ここでは、相対フォルダーに関する同じ規則が適用されます。次に、使用するライブラリをリンカーに指示する必要があります。これは、必要なすべてのファイルをProject Settings > Configuration Properties > Linker > Input > Additional Dependenciesリストする場所を通じて行われます。.libSDL.libSDLmain.libSDL_ttf.lib

バイナリ- ここにあるバイナリ.dllが必要なファイルになります。簡単なオプションは、それらを出力フォルダーに手動でコピーすることです (Configurationだけでなく、複数の を使用できることに注意してくださいDebug)。Post-Buildそれ以外の場合は、それらを自動的にコピーするいくつかの手順を用意して、プロセスを自動化できます。

これらすべての設定について、Project Propertiesウィンドウはデフォルトで単一の構成をターゲットにしていることを考慮してください。変更をすべての構成に適用するには、上部のおそらく と表示されているドロップダウンで をActive(Debug)選択しAll Configurations、設定を変更します。それらは、プロジェクト内のすべての構成に適用されます。

編集: また、プロジェクトを共有するために、プロジェクトの背後にある考え方によっては、ソース管理に外部ライブラリを含めることをお勧めします。Linux の人々がそれに完全に反対することは知っていますが、それは私がよく目にするものです。誰もがコードに対応するライブラリ バージョンを使用していることを確認します (たとえば、ライブラリの新しいバージョンにアップグレードしてインターフェイスが変更された場合、ソース管理のコードのみを変更した場合は、警告する必要があります)。他のチーム メンバーは新しいライブラリに手動でアップグレードする必要があります。ソース管理にある場合と同様に、同期により、プロジェクトのコードと外部ライブラリの両方で最新の状態になります)。

于 2012-11-18T16:54:25.597 に答える
0

ええ、リンカーをいじることがすべてであることがわかりました..私はそれをx86にリンクしませんでした.SDL_ttfとSDLのlibフォルダーにリンクしました...ダウンロードした拡張機能のバージョンにも関係しています. それらがすべて同じであることを確認してください。例: 1.2 と 1.2、2.0 と 2.0

于 2013-08-30T12:08:37.543 に答える