こんばんは。
初めて投稿させていただきます。
フリーソフトとして配布されている物の多くは
実行ファイル単体で動くようなシンプルな構成になっていると思います。
私、Vista、VC++ 2008 EEを開発環境としておりますが、
ビルドし、出来た実行ファイルをそのまま
別のPC(ランタイムなど何も入っていないPC)で実行するとエラーが返されます。
そこで、調べてみるとランタイムライブラリをスタティックにリンクすればいいとのことで、
赤坂玲音著のWindowsゲームプログラミングのサンプルソースを使用し、その方法を試してみました。
具体的には「プロジェクト」-「プロパティ」-「構成プロパティ」-「C/C++」-
「コード生成」-「ランタイムライブラリ」の内容をdllのついていないものにする、です。
すると
mt.exe : general error c101008a: Failed to save the updated manifest to the file ".\Debug\10_6.exe.embed.manifest". Qia|?LUcfD~Y
とエラーが表示されました。
これは一時的な解決策として埋め込みマニュフェストをOFFにすることで対処しました。
そして出来た実行ファイルを確認すると、容量が増えていました。
これは実行ファイルで使用するライブラリ等を埋め込んでいるからと認識しております。
しかし、そうして出来た実行ファイルはサンプル用の実行ファイルよりもさらに巨大なものになっておりました。
参考:静的リンクを行う前の実行ファイルサイズ 約30kByte
赤坂玲音さんが作成された実行ファイルサイズ 約40kByte
調べた方法で静的リンクを行った後の実行ファイルサイズ 約450kByte
そこで、質問なんですが、赤坂玲音さんが作成された物のようにどのPCでも単体で動作する実行ファイルで
それなりにファイルサイズを抑えるにはどうしたらいいのでしょうか。
私は、これは必要最低限のリンクを行っているからこれだけサイズの小さいものが出来ていると
思っているのですが、どうでしょうか?
もしそうだとすれば、その必要最低限のリンクを行う方法を教えていただきたいです。
さらに、マニュフェストファイルの件で、
一時的な解決策ではマニュフェストファイルは外部に作成されてしまいますので
根本的な解決法(実行ファイルに埋め込む)を教えていただきたいです。
勝手な認識をしている部分があるかもしれませんので、誤りがあればご指摘ください。
実行ファイル単体で起動する場合
Re:実行ファイル単体で起動する場合
>とエラーが表示されました
>根本的な解決法(実行ファイルに埋め込む)を教えていただきたいです
時々見かけますね、このエラー。
でも、SP1を適用した PCの方では見かけたことがないので、ひょっとすると
SP1を適用すると直るのかもしれません。
ちなみにこのエラーって、再度ビルドしたらエラーが出なくなったりしませんか?
>そして出来た実行ファイルを確認すると、容量が増えていました
参考にある3つの例は、全て同じコードから生成されたものですか?
もしそうであるならば、ちゃんとリリースでビルドしていますか?
(つまり、リリース用の CRTをリンクし、最適化をかけているかどうか)
Re:実行ファイル単体で起動する場合
>ちゃんとリリースでビルドしていますか?
リリース用のビルドがあったのですね。
ずっとデバッグでビルドしておりました。
リリースでビルドするとマニュフェストファイルの問題も発生しませんでした。
さらにリリース用にビルドして出来た実行ファイルは別のPCでも実行できました。
私がやりたかったことです。
大変助かりました。ありがとうございます。
リリース用のビルドがあったのですね。
ずっとデバッグでビルドしておりました。
リリースでビルドするとマニュフェストファイルの問題も発生しませんでした。
さらにリリース用にビルドして出来た実行ファイルは別のPCでも実行できました。
私がやりたかったことです。
大変助かりました。ありがとうございます。