Linux で共有ライブラリをビルド&配布する際に気をつけること
Linux の共有ライブラリをリンクするためのハッシュテーブルは、従来、.hash というセクションに収められていたのが、CentOS 5.0 や Fedora Core 6 以降? といった新しい環境では、.gnu.hash という新しいセクションに収められるようになった。
で、後者の環境で何も考えずに共有ライブラリをビルドすると、.gnu.hash セクションのみをもつものができあがるんだけど、それを Debian Etch とかに持っていくと、dlopen した際に SIGFPE で落ちてしまう。
問題を回避するためには、リンカに --hash-style=both というオプションを渡してやれば、両方のセクションが作成されるので、この問題を回避できる。
Q4M もこの問題にはまって、0.8.2 をリリースすることになりました。幸い問題を発見した人が id:hirose31 さん (ありがとうございます) で、いろいろ IRC で質問できたから問題特定できたけど、普通 SIGFPE が出て共有ライブラリの ABI 互換性の問題だなんて思わないよなー。
参考:
Technology Reviews & Software Reviews From Fixunix
http://article.gmane.org/gmane.linux.kernel.crash-dump.crash-utility/1107
Kazuho at Work: Q4M 0.8.1 released (including prebuilt binaries)