From: Koga Atsushi Date: 2008-02-09T23:33:40+09:00 Subject: [ruby-list:44600] HP-UX 11.23 ia64の拡張ライブラリビルドでなぜ -R'RPATHFLAG'がつくの? 皆様こんにちわ。kogと申します。 Rubyの拡張ライブラリをビルドするときにどうしてもよくわからないので どのあたりから調査したらいいものかどなたか教えていただけませんか。 環境: $ ruby -v ruby 1.8.6 (2007-12-03 patchlevel 113) [ia64-hpux11.23] OSは HP-UX 11.23 ia64 です。 以下の部分はHPtestdrive  http://h50146.www5.hp.com/partners/testdrive/ を利用してテストしました。 現象: ビルド中に ld: Bad text origin argument: でこける。 fastthread-1.0.1でやってみました。 $ ruby setup.rb ---> ext ---> ext/fastthread /house/kogkog/local/bin/ruby /house/kogkog/src/fastthread-1.0.1/ext/fastthread/extconf.rb creating Makefile <--- ext/fastthread <--- ext ---> ext ---> ext/fastthread make ld -b -o fastthread.sl fastthread.o -L'.' -L'/house/kogkog/local/lib' -R'/house/kogkog/local/lib' -L. -E -ldld -ldl -lm -lc ld: Bad text origin argument: /house/kogkog/local/lib Fatal error. *** Error exit code 1 この、 -R'/house/kogkog/local/lib' がなければこけないようなので、生成された ext/fastthread/Makefile を編集して  LIBPATH = -L'.' -L'$(libdir)' にしてみると、すんなり通ってしまいます。 $ make ld -b -o fastthread.sl fastthread.o -L'.' -L'/house/kogkog/local/lib' -L. -E -ldld -ldl -lm -lc $ rubyのビルドは http://www.ruby-lang.org/ja/install.cgi?cmd=view;name=HP-UX を参考に、 $ CFLAGS="-O -D_XOPEN_SOURCE_EXTENDED" ./configure --without-gcc --prefix=$HOME/local $ gmake $ gmake install で行いました。--without-gccとしたのは、実際に使いたいマシンでは gccがなく、この再現試験をやってみた HPtestdrive のマシンには gccがあって、どうもgccがあるときはそっちを優先するようなので つけています。 不思議なのは、ruby添付の拡張ライブラリ(socketとか)は ちゃんとインストールまでできてるように見えるのに、 $ ruby -rsocket -e 0 あとで ruby extconf.rb で生成すると Makefileに -Rが設定されることです。 この違いはなんなのでしょう? 一応おいかけてみたところ、lib/ruby/1.8/mkmf.rb のメソッドで決定され、 def libpathflag(libpath=$DEFLIBPATH|$LIBPATH) libpath.map{|x| case x when "$(topdir)", /\A\./ LIBPATHFLAG else LIBPATHFLAG+RPATHFLAG end % x.quote }.join end lib/ruby/1.8/ia64-hpux11.23/rbconfig.rb を見ると、 CONFIG["LIBPATHFLAG"] = " -L'%1$-s'" CONFIG["RPATHFLAG"] = " -R'%1$-s'" のようになっているから、のようではあるのですが。 rbconfig.rb を直接編集し CONFIG["RPATHFLAG"] = "" とすると、当然Makefileには 該当部分はふくまれなくなり、 拡張ライブラリのビルドは通ることは通るのですが、 こんなことしていいのか?心配ではあります。 この現象を回避するにはどうしたらいいでしょうか...? 以上です。