MacOSのgccで共有ライブラリを作る

MacOSgccで共有ライブラリをビルドしたら、何故かエラーになった。

% gcc -c -fPIC -o xxx.o xxx.c
% gcc -shared -o libxxx.so xxx.c
Undefined symbols:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

調べてみると、

OSXNextStepの流れから(?)、共有ライブラリが.bundle(例外もありそう)となっていて、gcc -sharedがoptionとして存在してない。

http://d.hatena.ne.jp/ma_ko/20070311

だそうだ。

マニュアルを見てみると、(APPLE ONLY)という文字があちこちに見られる。

で、解決策としては、-bundleオプションか、-dynamiclibオプションを使えば良さそうかなと。両者の違いとかわかんないけど、とりあえずビルドできた。

% gcc -c -fPIC -o xxx.o xxx.c
% gcc -dynamiclib -o libxxx.so xxx.o