1/99スタックエンジニアの適当記録

適当なことを書きます。関西で転職したいです。

DLLの謎を追え!

DLLの謎を追え! ということで、DLLについての理解がないので、調べがてらまとめていく。

DLLとは

DLLとは何んぞいということだが、この記事に詳しく書いてある。
www.glamenv-septzen.net
https://support.microsoft.com/ja-jp/help/815065/what-is-a-dll
(これから書く内容はクソ記事なので、上記の記事を読んだあと、ポエムとして読むんだ。ええか?)

DLLは共有ライブラリ、ライブラリの実態のファイルだよ!
windowsでは***.DLL、Linuxではlib***.so.***、というファイルになっている。
DLLは別のファイルで利用されるプログラムの部品。
例えば、sqlite3.exeはsqlite3.dllを参照している。よって、sqlite3.dllがないと動かない。
windows系のファイルはこのようにddlファイルに依存している。
よってdllを誤って消してしまうと、いろんなアプリケーションが動かなくなってしまうことがある。

DLL HELL

DLL地獄。
上記でも書いたとおりDLLは別のプログラムから参照される。
よって呼び出しもとのプログラムが指定しているDLLが置き換わると呼び出せなくなってしまう。
AプログラムはS.DLLを使っている。ある日Bプログラムが出現し、それが使うS.DLLには機能が足りないので、Sがバージョンアップされる。
Bは動くようになったが、バージョンアップされたS.DLLをAは使えない。
DLL HELL !!

依存を調べる

Dependency Walkerという依存関係を調べるツールがある。
フリーソフトだが、Microsoftのhelpにも紹介されている。
www.dependencywalker.com
例として、この間導入したsqlite3を調べてみた。
...調べれない。主は別の原因にぶち当たり、頓挫しましたが、本来は調べれるそうでs。


DLLはライブラリと呼ばれる「別のファイルから参照されるファイル」なんだね。

終わり。