CentOS 5.3 / x86_64 で Rabbit
64bit環境固有らしき「R_X86_64_32」問題。
/usr/bin/ld: rbatkhypertext.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC rbatkhypertext.o: could not read symbols: Bad value collect2: ld はステータス 1 で終了しました
これです。
色々試したところ、コードに問題があるのではなく .o を生成する時のgccコンパイルオプション
$ make rbatkhypertext.o gcc (中略) -I/usr/local/lib/ruby/site_ruby/1.8/x86_64-linux -I -fPIC -g -O2 -Wall -I/usr/local/include/atk-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -c rbatkhypertext.c
この -fPIC の前にある -I が悪さをしていました。
これ自体は glib/src/lib/mkmf-gnome2.rb で
$CPPFLAGS << " -I$(vendorarchdir) "
として付与されており、引数が空の -I を生成してしまっていました。空の -I の意味については深追いしていません。
ここをコメントアウトすればOKでした。
Changes によれば 2009-05-31 版から追加された模様です。<<追記>>
この関連は ruby-1.8.6-p368 と ruby-gtk2-0.19.1 で試しています。
メンテナの方に連絡したところ vendorarchdir が定義されている時だけ追加するように修正されるそうです。
また、vendorarchdir は古い目の Ruby で定義されていないとの事でしたので、Ruby 1.9 系では問題ないかもしれません。