作成した実行形式ファイルを他のPCで実行できない – プログラミング – Home

作成した実行形式ファイルを他のPCで実...
 
通知
すべてクリア

[解決済] 作成した実行形式ファイルを他のPCで実行できない


ぽーる
 ぽーる
(@ぽーる)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

はじめまして、ぽーるといいます。

Visual Studio 2005 でビルドしたC言語プログラムを、VC++のインストールされていな
いPCで実行しようとすると、「このアプリケーションの構成が正しくないため、アプ
リケーションを開始できませんでした。アプリケーションを再度インストールすること
により問題が解決する場合があります。」と出て実行できません。

プログラムにはMFCやWin32APIなどは使っておらず、C言語の標準関数のみで作りまし
た。

また、VC++のコンパイラを使い、コマンドラインでコンパイルしてみたところ他のPC
でも実行できました。
このとき、IDEからビルドしたときのファイルサイズは19KBだったのに対し、コマン
ドラインでコンパイルしたファイルのサイズは79KBでした。

どのようにしたら、IDEからでも他のPCでも実行できるような実行形式ファイルを出力
できるようになるのでしょうか?
よろしくお願いします。


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> プログラムにはMFCやWin32APIなどは使っておらず、
> C言語の標準関数のみで作りました。

標準関数を使うためには、C ランタイムライブラリ(CRT)というライブラリとリンクす
る必要があります。
VC++ 2005 用の CRT は、VC++ 2005 がインストールされていない環境には入っていない
可能性があります。

> また、VC++のコンパイラを使い、コマンドラインでコンパイルしてみたところ
> 他のPCでも実行できました。
> このとき、IDEからビルドしたときのファイルサイズは19KBだったのに対し、
> コマンドラインでコンパイルしたファイルのサイズは79KBでした。

CRT は、ダイナミックリンクとスタティックリンクという2つのリンク方式から選ぶこ
とが出来ます。
スタティックリンクにすると、EXE の中に CRT が含まれます。そのため、EXE のファイ
ルサイズが大きくなりますが、別途 CRT を用意する必要がなくなります。
ダイナミックリンクでは、CRT は DLL 形式で提供されます。EXE と CRT が別のファイ
ルになるため、EXE のサイズは小さくなりますが、CRT DLL がインストールされていな
いマシンでは動きません。

VC++ 2005 は、IDE からビルドすると、標準でダイナミックリンクが選択されます。コ
マンドラインからビルドすると、おそらく規定値がスタティックリンクなのでしょう。

というわけで、お手軽な方法としては、プロジェクトのプロパティを開き、「構成プロ
パティ」→「C/C++」→「コード生成」のページにある「ランタイムライブラリ」の項目
を、「DLL」を含まないものにすれば、スタティックリンクにすることができます。
対象のマシンに CRT DLL をインストールしておけば、EXE のサイズが小さくなるので便
利ですが、VC++ 2005 のランタイムライブラリはナントカアセンブリという形式になっ
ているらしく、単にファイルをコピーするだけでいいのかどうか自信がありません。
そのへん、詳しい方がいらっしゃいましたら、フォローお願いします。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

とりあえず、
http://www.microsoft.com/downloads/details.aspx?FamilyId=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=ja
でダウンロード可能なようです。
VS2005のCD-ROMの中や、インストールした先にも入っているようですが。


返信引用
ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
 

VC2005でプロジェクトを開いたら、
ツール → xxxのプロパティ をクリックして、プロパティ画面を開きます。

次に、構成プロパティ → C/C++ → コード生成 の順にクリック。

「ランタイムライブラリ」のところを【マルチスレッド MT】にしてOKをクリック。

あとはいつもどおりビルドすればいいと思われます。


返信引用
ぽーる
 ぽーる
(@ぽーる)
ゲスト
結合: 18年前
投稿: 5
Topic starter  

シャノンさん、瀬戸っぷさん、ねこまんじゅうさん、回答ありがとうございました。

ランタイムライブラリのところをマルチスレッドMTに変えてみたところ、他のPCで
も動作する実行形式ファイルを作成することができました。

それにしても、標準関数にまでこのようなランタイムライブラリが使用されているとい
うのは、知りませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました