このコードをコンパイルしたい:
#include <SDL.h>
int main(int argc, char* argv[]) {
return 0;
}
ただし、リンクすることはできません:Error 1 error LNK1561: entry point must be defined
このライブラリにはいくつかの奇妙なコードがあります: http://hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h
#define main SDL_main
また、SDL2.lib;SDL2main.lib
to Project Settings => Linker => Input。
このプロジェクトを実行するにはどうすればよいですか?
VS 2012 SP3、空のC++プロジェクト。
Dream.In.Codeの this thread によると:
プロジェクト名を右クリック->プロパティ->リンカータブを展開->システム->サブシステム:
Console (/SUBSYSTEM:CONSOLE)
であることを確認します
または、コンソールウィンドウを非表示にする場合、または マルチスレッドアプリケーションのデバッグ の場合は、代わりにSubSystemをWindow (/SUBSYSTEM:WINDOW)
に設定する必要があります。
/ SUBSYSTEM:CONSOLEの設定はソリューションの半分にすぎないことがわかりました。後半では、追加の定義にSDL_MAIN_HANDLED
を追加します。これを解決するために私が使用した手がかりはSDL_main.hにあります。 SDL_MAIN_HANDLED
を設定すると、SDLヘッダーファイルに、main
関数が既に提供されており、独自のエントリポイントを再定義したくないことを伝えます。
しないでください#undef main
! SDL側で再定義するのは非常に悪い習慣ですが、それらには正当な理由があります。WinMain
がライブラリ側で定義され、いくつかの初期化コードを実行して互換性の問題を解決するために使用されます。 (SteamやAndroidなどの他のプラットフォームへの移植など、さまざまなSDL実装を使用する場合はさらに多くなります)
それで、あなたは何をすべきですか? Windowsでは、常にSDL2main.lib
の前にSDL2.lib
を含め、メインが次の形式であることを確認してください。
int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT
出典: SDL2 Windows FAQ
tinky_winkiが書いたように
プロジェクト名を右クリック->プロパティ->リンカタブを展開->システム->サブシステム:コンソール(/ SUBSYSTEM:CONSOLE)であることを確認します
しかし、ウィンドウ付きのコンソールを期待しない場合は、単に/ SUBSYSTEM:WINDOWSを使用してください。
プロジェクト>>プロパティ>>リンカ>>詳細設定>>エントリポイント=メインおよび適用