質問: CONFIG['libdir'] + "/ruby/" + CONFIG['ruby_version'] + "/dpi" Dir[dpiIncludePath + "/*.rb"].each do |x| eval('require "#{x}"') 呼び出したrbファイル内コード require 'arrayExt' rubyを1.6.0から2.5.0にアップデート後、このようなエラーが起こってしまいました。 いろいろ調べてみたところ、rubyはバージョンをアップしていくと外部のライブラリとの互換性がなくなることがあるみたいですが、よくわかりませんでした。 arrayExt.so に関しては自分で作成したファイルではなく、中身の詳細についてはわかりません。(おそらく配列を何かしら変換するような中身です) バージョン2.5.0のまま*.soファイルを扱う方法はありますか。このsoファイルがバージョン1.6.0を対象とした互換性しかもってい場合は不可能なのでしょうか。 その場合、soファイルを自作できないのでバージョンを戻さなければいけないでしょうか。 1.6.0と2.5.0を使い分けるなど、何か解決方法を教えてください。 わかりにくい質問ですみませんが、よろしくお願いします。
回答: > > バージョン2.5.0のまま*.soファイルを扱う方法はありますか。このsoファイルがバージョン1.6.0を対象とした互換性しかもってい場合は不可能なのでしょうか。 > > > はい、RubyのC拡張は、「Ruby 2.0用」、「Ruby 2.1用」とバージョンごとになっていて、バイナリの互換性は**同一マイナーバージョン**に限られます。Ruby 1.6用のをRuby 2.5で使うことは不可能と考えて間違いないです。 > > (おそらく配列を何かしら変換するような中身です) > > > 処理の内容がわかれば、「同じ内容をRubyで書き直す」というのが案外現実的かも知れません。