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