過去の投稿記事 new!
・【画像】漫画でわかる外国人参政権
・東京電力のHPで停電状態が確認できたり(サービス再開!)
・戦国時代 ~ 江戸時代の徳川家康が熱かった
・vaio のバッテリは寿命が短いような気がする
・話題の Western Digital 製 WD20EARS を購入した
・C01LC をビックカメラで買ってきた
・2025年には空中都市が現実化?!
・【動画】わかりやすい「宇宙ひも理論」
・今世紀には「富士山噴火」「東海連動地震」「首都圏直下型地震」か?
・滅びた町、南浜町が Googleストリートビューで見れる

【 amazon 送料無料キャンペーン 】

バックリンクはご自由にどうぞ!     http://mfsocket.blogspot.com/feeds/posts/default?alt=rss リンク集 / ログイン

2008/02/20
静的と動的、ちょっと迷う

 
今回は Windows ソフトでのリンク(結合)をどうするかについて考察してみます。
 
 
私は VC6.0 で開発してきた今までは dll リンクで作成してきたのですが、VC2003 に
してからちょっと迷ってます。
 
 
なぜならば、VC6.0 が使用している dll ならば、Windows98 以降の OS なら 99%
デフォルトで持ってるため、
 
     「MSVCXXX.dll が見つかりません」
 
というエラーも出ることは無いのです。
 
 
しかし VC2003 が使用する dll では Windows98/2000 ではデフォルトでは入ってないし、
XP も SP2( サービスパック )で入ってるという状況です。
 
 
・・と言いながらも、実際は他の有名ソフトがインストールしてくれてたり、WindowsUpdate で提供
されてる?のか Windows2000以降なら、弊害は無いのですが( ´д`)
 
 
ちなみに静的リンク( lib )の場合だと、VC2003 で作成したのも基本的に問題なく Windows98 で
動かせます。
 
簡単にまとめてみるとこんな感じでしょうか。
種類 利点 欠点




・ exe 起動時に MSVC系の DLL を基本必要としない。
 PC初心者には優しい。
・ 製作者の環境で予め結合している為、バグの発生も
 把握しやすくDLL で起きる問題は無い。
・ exe のサイズが大きく増える。
・メモリ空間を共有できない。アプリ毎に DLL で共有
 できた空間を使用する。




・exe のサイズを節約できる。
・メモリ空間を静的リンクよりも節約できる。
 (アプリの数に比例して効果が上がる )

・DLLが無ければ起動できない。
・PCの環境によって DLL のバージョンが違う場合が
 あるのでバグが起きたときは、様々な手配を必要
 とする。 (事を把握しておく )

 

 
 
後は、プログラム開発の場合で、他のライブラリを利用するときに動的か静的ではけっこう違いが
出てきます。
 
 
例えば、LGPL というライセンスのライブラリは、動的リンクで無い場合ソースの公開義務が発生します。
 
そして動的の場合は、静的リンクに比べ踏む手順が多い(※1)ので、人によってはめんどくさいと思います。
 
※1
Windows  で言うと、LoadLibrarry() / GetProcAddress() / FreeLibrary()
Unix/gcc で言うと、dlopen() / dlsym() / dlclose()
を解して、ライブラリ関数を使用する。 
 
 
と今回ちょっと記述してみたのですが、私自身の中ではすでに結論は出てたりします。
 
・MSVCXXX系
   ・VC2003 まで動的(MDオプション)
   ・VC2005 は・・・今は調査不足なのもあり、答えなし
 
・他のライブラリ   ( 動的 )
・自分のライブラリ( 静的 )
 
 
といった具合でしょうか。。人に配布するとなると色々と悩みますね( ´д`)
 
 
関連記事:

0 コメント:

  • コメントには <b>, <strong>, <em>, <i>, <a> など一部の HTML タグを使用できます。