電脳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