のらりくらり

物理化学分野のポスドクです。プログラミング、読書、自転車などが好きです。

Mac OS X-gccでのダイナミックリンクライブラリの作り方がよく分からない件。

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 Xgccは-sharedオプションをサポートしていないという点。でも、これがないと、.soつくれないしなぁ。。。
dllの方のソース変えてみても、きちんとロード時リンクはされてるみたい。
謎。。。マニュアルが嘘なのか???
gccってこのへんの資料少なすぎ。
そもそもso(shared-object)が何なのかよく分からなくなってきた。。。ちなみに、.bundleっていうのがアップルでは推奨されているらしいけど、それについてはまだ調べてない。

また今度調べるか。

[02/06追記].bundleじゃなくて.dylibだな