crinklerとvisual studio 2017で400byteのexeを作る

最近4kbデモを作りたくてグラフィック面でいろいろ勉強していたんですが、今週は小さい実行ファイルを生成する手法を学びました

開発環境

空のプロジェクトを作成する

最近めっきりvisual studioを触る機会がなかったので知らなかったのですが、win32アプリケーションプロジェクトの作成の仕方が変わっていてびっくりしました

プロジェクト新規作成から【Visial C++>Windowsデスクトップ>Windows デスクトップ ウィザード】でプロジェクト名を設定してOK f:id:kaneta1011:20180701030008p:plain

次のダイアログで

  • Windowsアプリケーションを選択
  • 空のプロジェクトをチェック
  • セキュリティ開発ライフサイクルのチェックを外してOK f:id:kaneta1011:20180701030107p:plain

crinklerを入手する

以下のURLよりcrinklerを入手します

解凍して得た crinkler.exelink.exe にリネームして、上記で作成した空プロジェクトのソリューションディレクトリに移動します

こちらはデモシーナー界隈でよく使用されているらしいリンカーで、既存のリンカーと差し替えるだけでファイルサイズを圧縮してくれる優れものだそうです

http://www.crinkler.net/

プロジェクトの設定をする

以下の設定をRelease構成で行います

  • 【全般>プログラム全体の最適化】を プログラム全体の最適化なし に変更
  • VC++ディレクトリ>実行可能ファイルディレクトリ】の先頭$(SolutionDir) を追加
    • 先頭に追加しないと link.exe を検索する優先度が既存の物に負けてしまってcrinklerが利用されないので気を付けてください(2時間ぐらい潰されました)
  • 【リンカー>入力>すべての既定のライブラリを無視】を はい に変更
  • 【リンカー>マニフェストファイル>マニフェストの生成】を いいえ に変更
  • 【リンカー>コマンドライン>追加のオプション】に /CRINKLER を追加

main.cppを作成してビルド!

main.cppを作成して以下のコードを入力したらリリースビルドしましょう

int WinMainCRTStartup()
{
    return 0;
}

424byteの実行ファイルが作成できました! ちなみにcrinklerなしでビルドすると1,536byteなので1/4弱削減できているみたいです。すごいですね f:id:kaneta1011:20180701033429p:plain

ここからは映像を表示したり、音楽を再生したりする機能を追加してくことになります

いろいろ見ていると機能追加でだいたい1.5kbぐらいになるみたいですね、使える容量は2.5kbしかないのか...