DLLとLIBの違いとは

突然ですが,dllとlibの違いってご存知でしょうか?

一言で言えばこの二つには,プログラムのコンパイル時に(Windowsであれば).exeに全てのプログラムを入れるか,.exeと一部のプログラムを分離させるか,という違いがあります.

コンパイルがある言語といえば,CとかC++.ここら辺にかかわってきます.

名称

  • libファイル:Static Link Library
  • dllファイル:Dynamic Link Library

名称の由来はこんな感じです.「ライブラリ」という単語は,誰かが書いたプログラムをまとめたものです. C++言語の著名なライブラリであれば,boostとか,STLとかがありますね.

役割

  • libファイル:命令をまとめて保有していて,コンパイル時に.exeに取り込まれる
  • dllファイル:命令をまとめて保有していて,コンパイル時に.exeとは分離する

役割の違いは細かく見ていけば色々とありますが,僕が考えている重要な違いはこの一点に尽きます.

たまにソフトウェアをインストールすると,インストールファイルがとても少ないものがあると思いますが,そういう時はdllが作成されず,すべてのプログラムがexeの中に入っています.

これに対してdllは,exeと分離してます.そして,exeが実行されたときに呼び出されます. このように,二つの間には”外から見えるか”,”いつexeに読み込まれるか”という違いがあります.

特徴

  • libファイル:アクセスされたくないものを隠す,ユーザが誤って消す可能性がない.
  • dllファイル:ソフトをリリースした後でも,付属のdllさえ変更すれば,ソフト自体の挙動を修正することができる.

このように,それぞれの特徴としては,隠蔽性をとるか,拡張性をとるか,という違いがあるのかと思います. このような特徴があるため,多くのソフトウェアにおいてプラグインなどはdllを読み込むような仕組みにしている場合が多いです. windowsの場合には,”C:\Windows\SysWOW64”のようなディレクトリ見ると,多数のdllファイルが配置されているのが確認できます.

dllの優れている点は,ユーザには何も気づかせることなく,アップデートでコッソリ関数の実装だけを変更できることです.

「配列のポインタを受け取ってソートする関数」を作って,dllを作ります.

友人には,「void sort(int*)で呼び出してね!」と言っておけば,中を最初バブルソートで書いてたけども,後からクイックソートにコッソリ変えておく,なんてこともできます. 友人から見たら全く同じ関数を呼び出して,結果も同じですので,問題は発生しません.

まとめ

libとdllの違い,腑に落ちたでしょうか? 個人のプログラム作成の場合には,「どうしてもdllやlibが必要」ということはほぼ起こらないかと思いますが,この違いを知っているとGibHub等で公開されている外部のプログラムを使うのがスムーズになると思います.

違いを理解し,外部プログラムをどんどん取り込んで使ってみましょう!

タイトルとURLをコピーしました