2

私はSFMLライブラリを学習していて、チュートリアルからコードを選択しました。それはウィンドウを開き、それは私がそれを再び閉じることができるようになるはずですが、私がそれを閉じるとそれは言います

Debug Error!
Run-Time Check Failure #2 - stack around variable 'App' was corrupted.

and then the console stops working.
this is my code:

int main()
{
    // Create the main window
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML Events");

    while (App.IsOpened())
    {
        // Process events
        sf::Event Event;
        while (App.GetEvent(Event))
        {
            // Close window : exit
            if (Event.Type == sf::Event::Closed)
                App.Close();

            // Escape key : exit
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                App.Close();
        }

        // Display window on screen
        App.Display();
    }

    return EXIT_SUCCESS;// = return 0
}

デバッグライブラリへのリンクは

sfml-system.lib
sfml-window.lib
sfml-system-d.lib//these are debug files
sfml-window-d.lib

最初の2つを実行してプログラムをビルドした場合、エラーは発生しませんが、開くと次のように表示されます。

アプリケーションを正しく起動できませんでした(0xc0150002)。[OK]をクリックしてアプリケーションを閉じます

私は64ビットコンピューターを持っています。microsoft vc ++ 2010では、ビルドソリューションまたはデバッグを実行でき、常にビルドソリューションを実行します。

リリースモードでビルドしていますが、両方を試しましたが、両方とも機能しませんでした

誰かがこれが起こらないようにするために私が何ができるか、またはこれがどのように起こるかを教えてもらえますか?

4

3 に答える 3

1

これらのアプリケーションの起動に関する問題については、依存関係クロージャー内のすべての dll にアクセスできるかどうか、つまり、それらがすべて検索 PATH にあるかどうかを常に確認することをお勧めします。通常、依存関係ウォーカーを使用して欠落している dll を確認するか、ランタイム診断にgflagsを使用します。

dll と exe を同じフォルダーに配置することはできますが、スケーリングがうまくいきません。私が通常行う 1 つの方法は、ライブラリ パスを PATH 環境変数に配置することです。

また、注意すべき点の 1 つは、sfml には vs2005 と vs2008 用のビルド済みバイナリが付属しています。vs2010 を使用しているため、基礎となる C ランタイム ライブラリ (msvcrt) が異なり、潜在的な問題が発生する可能性があります。vs2010 を使用してソースから自分で sfml をビルドするか、一貫性を保つため、vs2005/vs2008 を使用する

于 2012-09-10T14:17:17.280 に答える
0

これ(および同等のライブラリ)を初めて使用したときも、関連する問題がいくつかありました。考慮すべきポイントを次に示します。

  1. コンパイル済みのライブラリ/dll は使用しないでください。CMake、boost_build (ブースト ライブラリ)、Scons (mongoDB) などの使用方法を学び、現在使用されているコンパイラ/プラットフォームに従ってライブラリをビルドします (もちろん、そのような可能性がある場合)。しばらくすると、このプロセスは非常に簡単でシンプルになり、後で他のプロジェクトの時間を大幅に節約できます。
  2. 簡単なプロジェクトの作成に関する SFML チュートリアルを読んでください。それらは読みやすく、理解しやすいです。また、CMake でサンプルを生成し、それらをビルドして、それらがどのように機能するかを確認してみてください。もう 1 つの優れたチュートリアルは、SFML プログラミングに関する本です (C++11 の使用を強く推奨していますが、これは素晴らしいと思います)。
  3. 指摘したように、DLL を使用したくない場合は「プリプロセッサ定義」に SFML_STATIC を追加します。リンカ オプションで「Windows (/SUBSYSTEM:WINDOWS)」を設定する方がよいと思います (「から正しく理解した場合、コンソールが機能しなくなります」 " 声明)。
  4. アプリが生成される release/debug フォルダーに libsndfile-1.dll と openal32.dll を配置することをお勧めします。提供されたパスから dll を見つける際に VC++ の動作が悪いことがわかりました。
于 2013-10-16T12:23:22.830 に答える
0

DLL を使用せず、SFML を exe にコンパイルしたい場合は、次のチュートリアルを参照してください 。プログラムで使用している追加のライブラリをリンカーに含めます->入力

于 2012-10-06T11:23:11.897 に答える