輝々凛々

ガンバるってことは、素晴らしい事だ。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ツッコミの投稿


(ツッコミ非公開の場合はチェック)

ライブラリの静と動

一般にライブラリには2種類ある。

実行できるアプリケーションに、「コンパイル時に」くっつける静的ライブラリと、実行できるアプリケーションの、「実行時に」くっつける動的ライブラリだ。ふたつはそれぞれ英語では「static link library」とか「dynamic link library」と言う。

さて。linuxやmac、windowsの世界では「動的ライブラリ」には2種類の動的性が存在している。ひとつが、「暗黙的リンク」で、もうひとつが「明示的リンク」だ。ようわ、くっつけられるか、自分でくっつけるかの違いだ。

暗黙的リンクの場合、コンパイル時に読み込むライブラリの名前などがわかっていて、プログラムを書くのは非常に楽だけど、「動的ライブラリ」のくせに、全然動的ではない。(ファイルという単位で分かれただけだ。

一方、明示的リンクの場合、プログラマには少し負担があるが、本当に「動的」にリンクできる。この「動的」の意味するところは、タイミングもそうだし、なくても動き出せることも当然だし、もっと言えば、同じ種類のライブラリで、複数の違う実装を実行時に判断して呼び分けることもできる。

一般に「プラグイン」とか「アドオン」、「アドイン」と呼ばれるものは、ほとんどが「動的ライブラリ」で「明示的リンク」によって実現されている。(ただし、スクリプト言語を用いるという方法もあるので、すべてが「動的ライブラリ」ではない。が、明示的なリンクには違いない。)

ちなみにWindowsでは、windows.hを読み込んで「LoadLibrary」によって、DLLを読み込み、「GetProcAddress」で関数へのポインタを取り出す。アドオンをビルドするときは、DLLでビルドする。モジュール定義ファイルを指定する事を忘れずに。

linux/macのgcc環境だと、dlfcn.hを読み込んで「dlopen」によって、DLLを読み込み、「dlsym」で関数へのポインタを取り出す。アドオンをビルドするときは、「gcc -shared myfunc.c -o mydll.lib」のようにする。

にしても、windows/linux/macに同じ仕組みが合って、本当に良かったと思う。しかも同じ手順だし。

関連記事

ツッコミの投稿


(ツッコミ非公開の場合はチェック)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。