« Flash更新のたびにMcAfee Scan ... Main Firefox: ピン留めタブの読込み... »

Ruby: Nmatrix gem がWindowsでインストールできない

Rubyで行列演算をやろうと探していたら、Nmatrixがいいとの情報が。

Windowsでgemをインストールしてみようとしたら、エラーが出やがる。

c:\>gem install nmatrix
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR: Error installing nmatrix:
ERROR: Failed to build gem native extension.

C:/Ruby21-x64/bin/ruby.exe extconf.rb
指定されたパスが見つかりません。
指定されたパスが見つかりません。
指定されたパスが見つかりません。
Exception `RuntimeError' at extconf.rb:131 - unable to determine g++ version (ma
tch to get version was nil)
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=C:/Ruby21-x64/bin/ruby
extconf.rb:131:in `gplusplus_version': unable to determine g++ version (match to get version was nil) (RuntimeError)
from extconf.rb:141:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/nmatrix-0.1.0 for inspection.
Results logged to C:/Ruby21-x64/lib/ruby/gems/2.1.0/extensions/x64-mingw32/2.1.0/nmatrix-0.1.0/gem_make.out

どうもNmatrixのextconf.rbでのgplusplus_versionで失敗しているもよう。

def gplusplus_version
  cxxvar = proc { |n| `#{CONFIG['CXX']} -E -dM - </dev/null | grep #{n}`.chomp.split(' ')[2] }
  major = cxxvar.call('__GNUC__')
  minor = cxxvar.call('__GNUC_MINOR__')
  patch = cxxvar.call('__GNUC_PATCHLEVEL__')

  raise("unable to determine g++ version (match to get version was nil)") if major.nil? || minor.nil? || patch.nil?

  "#{major}.#{minor}.#{patch}"
end

上記のcxxvarの箇所でのエラーとなる。CONFIG[‘CXX’]はDevKit内のMingw の g++ となっていて存在しているのだが、上の「指定されたパスが見つかりません。」と出ているのは、その後ろの「</dev/null」のリダイレクト箇所がWindowsで存在しないファイルとしてエラーになってしまっていた。

gemファイルを書き変えたら実行できるのかしら…。

cxxvar = proc { |n| `echo "" | #{CONFIG['CXX']} -E -dM - | grep #{n}`.chomp.split(' ')[2] }

リンク

[追記]
ライブラリとしてLAPACKが必要で、こちらはなんとかCmakeを使ってDevKitでのライブラリ生成できたのだが、さらにATLASのインストールも必要だった。まだ、途中だがCygwinかMinGWの環境が必要のようで、DevKitだけでは難しそう。

2 Comments

匿名2015/6/23 22:50

行列計算がしたいだけならGSLの方がいいのでは…

oshiro2015/6/29 12:45

コメントありがとうございます!GSLも試してみます。

Leave a comment

Your comment