この部分は何となく調べただけなので、間違いが多いと思います。
自分用の備忘録として残していますが、実際に触れる機会があれば、
修正したいと思います。
ライブラリには静的ライブラリと動的ライブラリがあり、
前者はリンク時にexeに組み込み、後者は実行時にexeファイルに組み込まれる。
そのため、dll等は単体で配布可能だが、lib等はexeも共に添付しないと意味が無い。
また、dllはdll自体の関数群を書いたヘッダーとダミーライブラリ(インポートライブラリ,lib)等で構成されている。
プログラムがdllを利用するときはlibからリンクを調べてdllにアクセスする形を取る。
winmainとかdllmainといった関数等を作るとライブラリ作成できる。
LinuxとWindowsでは拡張子が異なり、以下のような関係性になっている。
ちなみにgcc環境での作り方を書いてみたが、Visual Stadioとか使った方が楽。
Linux |
Windows |
静的 |
動的 |
静的 |
動的 |
a |
so |
lib |
dll |
gcc -fPIC -c xx.cでオブジェクトファイル作成 (fPICは共有ライブラリ再配置の高速化のためらしい。 ar -rv ライブラリ名.a xxx.o yyy.oの形式でライブラリ作成を行うことができる。 ちなみにranlibとかもar同様に使えるらしい。ranlibはシンボルテーブルの削除 |
gcc -shared -Wl,-soname,libxxx.so -o libxxx.so |
|
gcc -shared -o yyy.dll yyy.o defファイルを作成してからdllwrapでdll生成する方法もあるよう |
gccでのリンクの貼り方はgcc -o xxx xxx.c -lライブラリ名という感じのようだ。
dlltoolやdllwrap,reimp,dumpbin等についても確認しておきたい。
最終更新:2011年04月02日 17:06