管理人の趣味メインのメモto日記
AIONブログ RSS [情報サイト表示]
[注意] LinkやRSSについて

シエルサーバ RSS [情報サイト非表示]

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ -------- (--) --:-- ]  
   Category:スポンサー広告
・ω・)ノ
 
Visual C++ 2008 用メモ。
基本的に、コンパイルオプションってほとんど触らないんですよね。
でも、Visual C++2008は、いじらないとダメということがわかりました。
 
理由は・・・・、MSVCP90D.dll、MSVCR90D.dllを利用しているからです。
当たり前なのですが、Windows上のプログラムはランタイムライブラリを
多数利用しています。
起動先のパソコン君にインストールされていれば問題ないのですが、
上記、MSVCP90D.dll、MSVCR90D.dllは今のところOSインストールで
必ずインストールされるものではありませんし、また・・・・WindowsUpdateで
インストールされるものでもありません。
つまり、インストーラーを作ってインストールするようにするか、
Exeに静的にLinkする必要があります。
 
 
で、まず・・・・動的にLinkしているライブラリの調査方法ですが
 
 
dumpbin /dependents "調査対象.exe"
 

を、Dos窓ことコマンドプロンプトで入力すればOKです。
で、以下のような結果が表示されます。
 
Microsoft (R) COFF Binary File Dumper Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
 
 
Dump of file 調査対象.exe
 
File Type: EXECUTABLE IMAGE
 
Image has the following dependencies:
 
KERNEL32.dll
USER32.dll
ole32.dll
WS2_32.dll
MSVCP90D.dll
MSVCR90D.dll
 
Summary
 
1BE000 .data
2000 .idata
B000 .rdata
6000 .reloc
1000 .rsrc
9E000 .text
4D000 .textbss
 
 

上記結果はで表示された「***.dll」が動的Linkを行っている
dll となるわけです。
多少のバージョンは違えど、KERNEL32.dll、USER32.dll、
ole32.dll、WS2_32.dllこの辺はWindowsをインストールすれば
必ずはいってくるものなのですが、最後の2個はVisual C++ 2008を
インストールした環境でないと存在しません。
なので、非開発環境ではインストールする必要があるのです。
 
が・・・・
 
 
 
インストーラーの作成はいやだと言う場合、コンパイルオプションを
変更する事で、対応が可能になります。
 
 
「プロジェクト(P)」→「プロパティ(Alt+F7)」にある、
「構成プロパティ」→「C/C++」→「コード生成」にある、
ランタイムライブラリを「マルチスレッド デバッグ(/MTd)」もしくは
「マルチスレッド(/MT)」にする事で、MSVCP90D.dllとMSVCR90D.dllを
静的Linkしてくれます。
 
この変更を加えて、再度さきほどの調査用コマンドを投入すると
MSVCP90D.dllとMSVCR90D.dllが消えているはずです。
これでめでたく、どの環境でも動作するはず・・・・です。
 
 
 
 
余談ですが・・・・2年ほど前、****71D.dllがなくてメイポが
動作しないとか言う不具合に見舞われていた気がするのですが、
たぶん、メイポの開発環境が変わって、コンパイルオプションの
見直しをしなかった結果が招いたバグだったのでしょうね・・・・。
 
スポンサーサイト
[ 2009-02-09 (Mon) 21:23 ]   Comment(0)
   Category:雑記:IT関連
管理者にだけ表示を許可する

TrackBackURL
→ http://extremes.blog40.fc2.com/tb.php/15-38bda89a
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。