0

こんにちは。msVS++2010を使用していて、一日中SFMLをセットアップしようとしています。サイトから1.6をダウンロードし、VS2010で再構築しましたが、sfmlシステムが作成されなかったのは残念です。 -d.libファイル。これは私が使い慣れているものであり、新しいsystem-sおよびsystem-sdライブラリのみを生成しました。

次に、このビデオを注意深く見て、彼がsfml-system-sdの外部ライブラリを追加してテストコードを実行したことを確認しました。そのため、.exeの横にsfml-system-d.dllを追加し、次のまったく同じコードをビデオで取得しました。動作することを示した:

#include <iostream>
#include <SFML/System.hpp>

int main(int argc, char **argv)
{
    sf::Clock clock;

    sf::Sleep(0.1f);

    while(clock.GetElapsedTime() < 5.0f)
    {
        std::cout << clock.GetElapsedTime() << std::endl;
        sf::Sleep(0.5f);
    }
}

明らかにクロックとスリープは機能していますが、コードの単純な行を追加すると'sf :: Thread thread();' 「プログラムを起動できません」、「設定が正しくありません」、「マニフェストファイルでエラーの可能性を確認してください」、「修正を解除しました」というエラーボックスがポップアップ表示されます。

また、スレッドに関するチュートリアルの最初のプログラムを実行しようとすると、次のようになります。

#include <SFML/System.hpp>
#include <iostream>

void ThreadFunction(void* UserData)
{
    // Print something...
    for (int i = 0; i < 10; ++i)
        std::cout << "I'm the thread number 1" << std::endl;
}

int main()
{
    // Create a thread with our function
    sf::Thread Thread(&ThreadFunction);

    // Start it !
    Thread.Launch();

    // Print something...
    for (int i = 0; i < 10; ++i)
        std::cout << "I'm the main thread" << std::endl;

    return EXIT_SUCCESS;
}

私はこのような8つの未解決の外部シンボルを取得します:

1>sfml-system-s-d.lib(Thread.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::ios_base::width(int)" (__imp_?width@ios_base@std@@QAEHH@Z)
 fatal error LNK1120: 8 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

最後に、これが私のプロジェクトの設定方法です。

  • 箱から出してすぐに使えるディレクトリをインクルードし、新しくダウンロードしたSFML 1.6 / include
  • VS2010で再構築されたSFMLへのlibディレクトリ(デバッグ/リリースDLL設定、および静的)。
  • sfml-system-sd.libファイルへの追加の依存関係。
  • 欲求不満から、私はすべてのdllファイルを.exeの隣に配置しました
4

1 に答える 1

2

SFMLを構築するときにCRTにリンクしていないようです。(ios_widthはiostreamであり、CRTライブラリが必要です。)

今回は以下を行う場合を除いて、SFMLを再構築する必要があります。

0.このライブラリのリストをコピーします

kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib

  1. 個々のプロジェクトに移動しますProperties -> Configuration -> Linker -> Input。または、「リンカー」がない場合は、に移動しProperties -> Configuration -> Librarianます。

  2. 「デフォルトライブラリを無視する」を「いいえ」に設定すると、おそらく機能します

  3. 100%安全にしたい場合は、追加の依存関係をクリックして展開し、[編集]をクリックします。上記のライブラリに貼り付けるだけです

  4. [ライブラリアン]タブが表示されている場合は、[リンクライブラリの依存関係]を[はい]に設定します

  5. Debug DLL、Debug staticなどのビルド設定を変更するたびに、手順1〜4を繰り返します。

SFMLを再コンパイルしたとき(もちろん、1.6は1.x行の最後であり、2.0は互換性がないため、静的コンパイルがあります;))これらの参照を追加する必要がありました。不要なものはすべて無視されます(無視することについて「警告」されます)が、デフォルトです;)

残念ながら、SFMLソリューションのすべてを更新する必要があります。正しく思い出せば、すべてデフォルトのライブラリが欠落しているためです。

于 2011-06-07T21:47:51.187 に答える