gccでshared libraryを作る場合
以下のまとめ記事が秀逸なのではてブしておいた。
なお、-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
として渡される。