OSごとのライブラリのタイプについてざっくりしりたいなと思って調べたのでそのメモです。
知らなくてすごく困ったことはないのですが、まいど知識があいまいなことにモヤモヤしていました。
OS別のライブラリ拡張子
| 静的リンク | 動的リンク | 動的ロード | |
|---|---|---|---|
| macOS | *.a |
*.dylib |
*.bundle or *.so
|
| Linux系 | *.a |
*.so |
*.so |
| Windows | *.lib |
*.dll |
*.dll |
静的リンク
コンパイル時に実行ファイルに組み込まれる。
動的リンク
実行ファイル起動時に組み込まれる。なのでそのライブラリが見つからないと起動できない。
動的ロード
プログラム上でそのライブラリを読み込むタイミングでロードされる。
(処理が終わったら毎度解放するのだろうか?)
なので、ライブラリがなくてもその部分が実行されるまでは動く。
速度
静的リンク > 動的リンク > 動的ロード
そりゃそうですね。
その他メモ
- macOSとLinux系のライブラリは拡張子が同じものもある(
*.a,*.so)が、互換性はない。 - macOSの動的ロードの拡張子、Appleとしては
*.bundleを使ってほしいが、linuxからの移植だったりすると互換性のため*.soが使われることもしばしばあるという記述を見た。
互換性ゆうても、バイナリ自体は違うので、使用するプログラム側でOS別に読み込むライブラリ名を切り替えなくてよいとかそうゆう意味かな。 - windowsはやっぱり独自路線だなあ。