gccでshared libraryを作る場合

以下のまとめ記事が秀逸なのではてブしておいた。

http://d.hatena.ne.jp/wagavulin/20091026/1256577635

なお、-fPICと-fpicの違いは

http://archive.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html

にあり、

コードの生成には -fPIC または -fpic を使用してください。 コードの生成に -fPIC と -fpic のどちらを使うかは、ターゲットに依存します。 -fPIC を選んでおけば常に動きますが、-fpic よりも大きなコードを生成する可能性があります (これを覚えておく方法は、「PIC は大文字だから大きなコードを生成する可能性がある」、です)。 -fpic オプションを使うと、通常は小さくて速いコードが生成されますが、グローバルで可視にできるシンボルの数やコードのサイズといった、プラットフォームに依存する制限があります。 共有ライブラリを作成するとき、うまくいくかどうかをリンカが教えてくれます。 疑わしいとき、私は -fPIC の方を選択します。なぜなら、-fPIC は常に機能するからです。

とのこと。x86ではおなじらしい。なんで-fPIC使う。

あと、よく忘れちゃうので書いておくけれど、-Wlオプションはリンカに渡すオプションをカンマで区切って指定する。例えば

gcc -shared -fPIC -Wl,-soname,libfoo.so.1,-rpath,/usr/foo/lib -o libfoo.so.1.0.1 foo.c

とすると、ldにはカンマ単位に分割して

ld -soname libfoo.so.1 -rpath /usr/foo/lib

として渡される。