[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002929] Re: NArray and Ruby/GSL on Ruby 1.9



 大塚さん

サンプルプログラムの名前がかぶっているのが問題ですね。
 ライブラリのサーチパス(カレントディレクトリ)の扱いが、これまでとは
変わったんですかね。いずれにせよ、ライブラリと同じ名前のスクリプトは
まずいんでしょうね。今後は避けます。ご指摘ありがとうございます。

二番目のケースはちょっと分かりません。
何か思いついたらまたご連絡差し上げます。
 たぶん、(拡張)ライブラリを複数同時に組み合わせて使うときに守るべき
何かがあって、Ruby/GSLはそれに従っていないんでしょう。起こっていること
としては、NArray の C でのグローバル変数である cNArray を Ruby/GSL
では extern宣言してあるわけですが、その実体が見えていない、ということの
ようです。"flatnamespace" がカギみたいですが、、、
-
 常定 芳基 <tsunesada@xxxxxxxxxxxxxxxxxxxx>
 東京工業大学 大学院理工学研究科 基礎物理学専攻
 152-8550 東京都目黒区大岡山2-12-1 本館B45号室
 TEL/FAX: 03-5734-2462/2756



Yoshiki TSUNESADA さんは書きました:
 電脳Rubyのみなさま

 東工大の常定と申します。NArray と Ruby/GSL がらみのことについて、質問
させて
ください。複数の拡張ライブラリを組み 合わせて使うときに、何かエラーに遭遇
された方
がいらっしゃったら、お知恵を借りたいです。

 現在、Ruby/GSL を Ruby 1.9 対応にさ せる変更をしています。どうやらそれその ものはできてはいるようです。ですが、NArrayと組み合わ せようとすると、こけ
ます。
環境はMacOS X (Leopard) - Darwinで す。エラーメッセージは2タイプあり、以下
のようなものです。

1.
/Users/yoshiki/Ruby/rb-gsl/examples/narray/narray.rb:5:in `<top
(required)>': uninitialized constant GSL (NameError)
   from /usr/local/lib/ruby/site_ruby/1.9.0/gsl.rb:1:in `require'
from /usr/local/lib/ruby/site_ruby/1.9.0/gsl.rb:1:in `<top (required)>'
   from ./narray.rb:2:in `require'
   from ./narray.rb:2:in `<main>'

2.
/usr/local/lib/ruby/site_ruby/1.9.0/gsl.rb:2:in `require':
dlopen(/usr/local/lib/ruby/site_ruby/1.9.0/i686-darwin9.2.1/ rb_gsl.bundle,
9): Symbol not found: _cNArray (LoadError)
 Referenced from:
/usr/local/lib/ruby/site_ruby/1.9.0/i686-darwin9.2.1/rb_gsl.bundle
 Expected in: flat namespace
- /usr/local/lib/ruby/site_ruby/1.9.0/i686-darwin9.2.1/rb_gsl.bundle
from /usr/local/lib/ruby/site_ruby/1.9.0/gsl.rb:2:in `<top (required)>'
   from ./narray.rb:2:in `require'
   from ./narray.rb:2:in `<main>'

 最初のケースは require("gsl") しているのに GSL が見つからないという
ラー。
2つ目は、_cNArrayが見えてないという ことですが、何か Mac 特有の問題かも
しれま
せん。require("gsl")した瞬間にこけてます。ち なみにrequire("gsl")では、
narray.bundle (narray.so) と rb_gsl.bundle (rb_gsl.so) が順番にロード
されます。最初のケースではロードでは こけずにモジュール(Ruby定数)GSLに
アクセ
スしたときにエラーになり、2つ目の ケースでは narray.bundleはロードできて
rb_gsl.bundleのロードでこけているように見えます。
 2つのケースがどういうときに起こる のかは、つかみきれていません。エラー
が起き
ないスクリプトでも、パス指定によって 起きたり起きなかったりします。例えば examples/min.rbというスクリプトがある のですが、examples/ の下で ./min.rb とやると動くのに、別のディレクトリに 入って ../min.rb とやるとケース1の
エラー
が起きるという感じ。わけがわかりません。

Ruby 1.8.6 ではこのようなことは起こ りません。Ruby 1.9 の問題なのか Mac の問題なのかもわかってません(他の環 境では試していません)。似た経験おあ
りの
方いらっしゃいましたら、対処法などお願いします。

環境:
 OS: Mac OS X 10.5 (Leopard) - Darwin 9.2.1, gcc 4.0.1
 Ruby: 1.8.6-p114, 1.9.0-0
 GSL: 1.10
 Ruby/GSL: 1.10.3 から Ruby 1.9 へ対応させるべく変更中。NArray を
  使わないなら完全動作。
-
 常定 芳基 <tsunesada@xxxxxxxxxxxxxxxxxxxx>
 東京工業大学 大学院理工学研究科 基礎物理学専攻
 152-8550 東京都目黒区大岡山2-12-1 本館B45号室
 TEL/FAX: 03-5734-2462/2756



--
京都大学大学院理学研究科
気象学研究室 D2
大塚成徳 (Shigenori OTSUKA)
email: otsuka@xxxxxxxxxxxxxxxxxx