[#44578] Ruby初心者が作りました — Kabu and Ruby管理人 <kabu_and_ruby@...>

http://www.geocities.jp/kabuandruby/index.html

26 messages 2008/02/06

[#44691] ”Rubyアプリケーションプログラミング”の伝言サーバの使い方 — "Yangkook Kim" <yangkookkim@...>

キムと申します。オーム社から出版されている書籍、"Rubyアプリケーションプログラミング"のP267~275に掲載されている伝言サーバー&クライアントの利用の仕方がわかりません。質問を要約すると次の2点です。1、サーバーが正常に起動されているかどうかわからない。2、書き込みクライアントで入力をサーバーに送信する方法がわからない。

8 messages 2008/02/24

[ruby-list:44600] HP-UX 11.23 ia64の拡張ライブラリビルドでなぜ -R'RPATHFLAG'がつくの?

From: Koga Atsushi <kog@...>
Date: 2008-02-09 14:33:40 UTC
List: ruby-list #44600
皆様こんにちわ。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には 該当部分はふくまれなくなり、
拡張ライブラリのビルドは通ることは通るのですが、
こんなことしていいのか?心配ではあります。

この現象を回避するにはどうしたらいいでしょうか...?

以上です。

In This Thread

Prev Next