2016-05-03 5 views
4

基本的に、私はSDLウィンドウアプリケーションを書くときには見たくないコンソールウィンドウを取得します。CバージョンSDL2とリンクしている間にDからコンソールを隠す

Cでは、答えは簡単です。リンカのSubSystemをWindowsに変更します。 SDLは残りを行います。それはmainSDL_mainに再定義するマクロを持っています。それはそれ自身の隠されたWinMain機能の中から呼び出します。あなたの主な機能で議論を取り、すべてがスムーズに進むようにしてください。

Dでは、もう少し問題があります。 -L/SUBSYSTEM:WINDOWSをリンカーに渡すだけでサブシステムを変更すると、私はmainと宣言しました。SDLはWinMainと宣言しています。処理方法はわかりません。私はvoid main()からextern(C) int SDL_main(int argc, char*[] argv)に署名を変更することで問題は解決すると思ったが、リンカはDのランタイムシンボルを見つけることができないと言った。 Cで書かれているエントリポイントと何か関係がありますか?

もう一方で、私の問題は、私がどのように放棄を設定したかであろう。私はthis repositoryから作業しています。これは、GitHubのすべての異なるDerelictリポジトリのライブアップデートアマルガムです。私のVisualDソリューションでは、私は3つの関連プロジェクトを持っています:SDL2とユーティリティーライブラリへのソースを含む自家製のDerelictプロジェクトと、hereというC-API SDL2とSDL2mainプロジェクト。私は3つの結果ライブラリーにコンパイルとリンクを行います.DerelictとSDL2mainは静的で、SDL2は動的です。私は、このセットアップが責められているとは言いがたいです。なぜなら、うまくいかないコンソールウィンドウを保存するだけだからです。 DMDに渡されるコマンドラインで

+0

[ask]を参照し、[mcve]を提供してください。外部リンク**はカウントしません** – Olaf

+0

あなたはwin32にいますか? –

+0

@Olaf投稿された質問には問題はありません。それは適切に簡潔であり、必要なコードはすべて(ただし、ただ)掲載されます。確かに、[c]タグはおそらく貧弱な決定でした。明らかにする? – Mako

答えて

1

、あなたのdub.jsonファイルに以下を挿入し、あなたがダブ(私はお勧めする)とGDCを使用する場合には、リンカオプション-L/SUBSYSTEM:WINDOWS

+0

多分あなたはそれを逃した(私はかなり冗長ではなかった)が、私はそれを私が試したことの一つとして挙げた。リンカは、SDLは自分自身の 'main'に加えて' WinMain'を介してエントリポイントを提供しようとしていると言います。 – Mako

+0

私はあなたの質問のリンカーフラグについては何も読んでいません。 –

+0

私は明らかに不明でした。私はそれを "単純にサブシステムを変更するだけで"覆い、間違ってそれが十分であると仮定しました。それに応じて質問が更新されました。 – Mako

0

を追加します。

"dflags": ["-Wl,--subsystem,windows"] 
+0

ダブ(まだ)は使用していませんが、現在のDMDに渡している '-L/SUBSYSTEM:WINDOWS'フラグと同じことをするようです。 – Mako

関連する問題