1

チュートリアル #1を正常にコンパイルすることができました。しかし、2番目のものをコンパイルできません。

new -> Project を実行すると、これらの設定のいずれかが干渉している可能性がありますか? 空のプロジェクトを実行したことを確認してください。それ以外の場合はコンソールです。

どうしたの?コンパイル エラー:

Error   1   error LNK2019: unresolved external symbol _WinMain@16 referenced in function
___tmainCRTStartup  C:\...\02-videomode-iterate\MSVCRTD.lib(crtexew.obj)    02-videomode-iterate
Error   2   error LNK1120: 1 unresolved externals   C:\...\Debug\02-videomode-iterate.exe   02-videomode-iterate

ソース全体:

#include <SFML/Window.hpp>

int main()
{
    sf::Window App(sf::VideoMode(800, 600, 32), "SFML-tut: 02");

    bool Running = true;
    while (Running)
    {
        App.Display();
    }

    return EXIT_SUCCESS;
}

プロジェクト設定:

include dir, lib: dir が正しく設定されています。

c++ -> プリプロセッサ -> プリプロセッサの定義:

SFML_DYNAMIC

リンカ -> 入力

試してみました:sfml-window.libそしてsfml-window-d.lib( Visual Studio は開始時に常にデバッグ モードを使用しているようですが、チュートリアル #1 は -d バージョンを使用しなかった場合にのみ機能しました。

サブシステム:

/サブシステム:Windows

4

1 に答える 1

1

フラグを設定すると、リンカは従来の ではなく関数/SUBSYSTEM:WINDOWSを探します。次の 2 つのオプションがあります。WinMainmain

  1. に変更し/SUBSYSTEM:CONSOLEます。煩わしい (またはおそらく役に立つ) コンソール ウィンドウが表示されますが、これは で取り除くことができますFreeConsole
  2. 次の署名に変更mainします。WinMain

    int CALLBACK WinMain(
     HINSTANCE hInstance,
     HINSTANCE hPrevInstance,
     LPSTR lpCmdLine,
     int nCmdShow
    );
    

    argcとにアクセスする必要がない限りargv、この変更によって大きな問題が発生することはありません。


編集: おそらくこれも一見の価値があります (2 番目のチュートリアルからコピー):

Windows オペレーティング システムでは、特にコンソールを表示したくない場合は、「Windows アプリケーション」プロジェクトを作成した可能性があります。このような場合、main を WinMain に置き換えるのを避けるために、SFML_Main スタティック ライブラリとリンクして、標準でポータブルなメイン エントリ ポイントを保持することができます。

要するに、sfml-main.libリンクするライブラリのリストに追加 (または類似) することになると思います。

于 2012-10-19T10:21:55.673 に答える