Visual C++ 2008 Express Edition で配布可能な EXE ファイルを作るためには、ランタイムライブラリを静的リンクします。
…と、これでずっと解決してきたつもりなんですが、最近そうでもないのでしょうか?
Visual C++ インストール直後の設定でビルドした EXE ファイルは、 Visual C++ のランタイムがないと動作しなくなっています(プログラムサイズを小さくするため)。ところがゲームのように配布前提のプログラムの場合、これだと困りますので、ランタイム不要で動かす設定にして配布するのが常です。
やり方はプロジェクトを開いて、「プロジェクト(P)」→「プロパティ(P)」→「構成プロパティ」→「C/C++」→「コード生成」とたどり、「ランタイムライブラリ」を DLL 以外に設定します(初期状態では DLL に設定されています)。
実は Visual C++ 2008 を入れてから試してないのですが、これだと動かないということを書いているサイトがたくさんありました。もしかしたら仕様が変わったのでしょうか。
メルマガで奨励してる責任もありますし、仕事が始まったら他の人のパソコンで試してみようと思います(でも、 PE 情報を見てみる限り、 Windows に標準で入っていない DLL は読みに行っていない様に見えます…)。
Comments
一応自分も配布?というか、テストとして他人にプログラムを押し付けたことがあるのですが
マルチスレッド DLL (/MD)
で渡したところ、起動できないと文句を言われました。
マルチスレッド (/MT)
でないと動きませんでした。
VC++2008でも同じだと思っていたのですが…
どうなのでしょうか?
> yomogi さん
そうなんですよね。
ちなみにあの設定ちょっとわかりづらいですよね。
ランタイムライブラリの使用「する・しない」とかの方がわかりやすいです。
情報ありがとうございました(^^
visual studio 2008 sp1 の再頒布可能ランタイムパッケージがあります。こちらをユーザがインストールすることで、dll版ランタイムの実行ファイルでも実行可能になります。
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2
>じぇつさん
情報をいただきましてありがとうございます(^^
そうか、ランタイムが配布されているんですね。
最悪、サイドバイサイドの設定が必要かと思いましたが、
ランタイムを入れていただければ無用の心配となりそうです。
デバッグバージョンでは、ランタイムを入れても
無理でしたよ。
> saru さん
情報いただきましてありがとうございます m(_ _)m
デバッグ版を配布する予定がありませんでしたので確認しておりませんでした。
ちょっと同僚のマシンで実行してみたいと思います。
なんでしょう、デバッグ向けの特別な関数へリンクしているのでしょうか…
Contributions