Mac OS Xで、コンソール上でダイナミックリンクライブラリ(shared-object)の作り方がよくわからない件の覚書。
とりあえず、メインのソースを以下のように作成。
/* main.c */ #include <stdio.h> int hello(void); int main(void) { hello(); return 0; }
そして、ライブラリのソース
/* mydll.c */ #include <stdio.h> int hello(void) { printf("Test!!!\n"); return 0; }
これで、まず、dllをコンパイル
>gcc -c mydll.c >gcc -shared -o libmydll.so mydll.o
そして、main.cをコンパイル
>gcc main.c -lmydll
これできちんと動くけど・・・
問題は、gccのマニュアルを見ると、Mac OS Xのgccは-sharedオプションをサポートしていないという点。でも、これがないと、.soつくれないしなぁ。。。
dllの方のソース変えてみても、きちんとロード時リンクはされてるみたい。
謎。。。マニュアルが嘘なのか???
gccってこのへんの資料少なすぎ。
そもそもso(shared-object)が何なのかよく分からなくなってきた。。。ちなみに、.bundleっていうのがアップルでは推奨されているらしいけど、それについてはまだ調べてない。
また今度調べるか。
[02/06追記].bundleじゃなくて.dylibだな