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はライブラリと呼ばれる「別のファイルから参照されるファイル」なんだね。
終わり。