mieki256's diary



2014/05/30(金) [n年前の日記]

#2 [ruby] cairo + Ruby Windows版が使えない

Windows7 x64 + Ruby 1.9.3 p545 (i386-mingw32) + cairo 1.12.9 x86-mingw32 で cairo を試してみようとしたら、cairo.so がロードできないとエラーが。
> ruby --version
ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

> gem install cairo --platform x86-mingw32

> gem list | grep cairo
cairo (1.12.9 x86-mingw32)

> ruby -r cairo -e "p Cairo::VERSION"

C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- cairo.so (LoadError)
        from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from C:/Ruby/Ruby193mingw/lib/ruby/gems/1.9.1/gems/cairo-1.12.9-x86-mingw32/lib/cairo.rb:46:in `rescue in <top (required)>'
        from C:/Ruby/Ruby193mingw/lib/ruby/gems/1.9.1/gems/cairo-1.12.9-x86-mingw32/lib/cairo.rb:42:in `<top (required)>'
        from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
        from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
        from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'

ややこしいことに、Ruby 2.0.0 p451 (i386-mingw32) + cairo 1.12.9 x86-mingw32 なら使えるようで。
> pik 200
Select which Ruby you want:
1. 200: ruby 2.0.0p451 (2014-02-24) [i386-mingw32]
2. 200: ruby 2.0.0p353 (2013-11-22) [i386-mswin32_100]
?  1

> ruby --version
ruby 2.0.0p451 (2014-02-24) [i386-mingw32]

> ruby -r cairo -e "p Cairo::VERSION"
[1, 12, 16]


_[ruby-list:49399] Re: cairo 1.12.5 x86-mingw32 で cairo.so が見つからない が関係ありそうな気がする。

Rubyインストールフォルダ\lib\ruby\gems\2.0.0\gems\cairo-1.12.9-x86-mingw32\lib\ のファイル構成は以下のようになっていて。
C:\RUBY\RUBY200MINGW\LIB\RUBY\GEMS\2.0.0\GEMS\CAIRO-1.12.9-X86-MINGW32\LIB
│  cairo.rb
│
├─2.0
│      cairo.so
│
├─2.1
│      cairo.so
│
└─cairo
    │  color.rb
    │  colors.rb
    │  constants.rb
    │  context.rb
    │  device.rb
    │  paper.rb
    │  papers.rb
    │  path.rb
    │  pattern.rb
    │  point.rb
    │  surface.rb
    │
    └─context
            blur.rb
            circle.rb
            color.rb
            path.rb
            rectangle.rb
            triangle.rb

cairo.rb の中で以下の処理を通るのだけど。 Ruby 2.0.0 の場合は、2.0/cairo.so が require されるのでエラーが出ない。
begin
  major, minor, _ = RUBY_VERSION.split(/\./)
  require "#{major}.#{minor}/cairo.so"
rescue LoadError
  require 'cairo.so'
end

しかし Ruby 1.9.3 の場合は、1.9/cairo.so なんて存在しないので、require 'cairo.so' を通ってしまって、「そんなもんねえよ!」と言われるらしい。

1.9/cairo.so が入ってるバージョンが、かつては存在していたはず…と予想して、試しに古いバージョンを入れていったら、昔はたしかに 1.9/cairo.so が存在していたらしい。

過去バージョンの一覧は、 _all versions of cairo | RubyGems.org | your community gem host で見れる。色々インストールして確認してみたけど、lib/以下のフォルダの有無は以下の通り。
cairo 1.10.2 : 1.8 / 1.9
cairo 1.12.3 : 1.8 / 1.9
cairo 1.12.4 :       1.9 / 2.0

cairo 1.12.5 :       1.9 / 2.0        ※ Ruby 1.9 で動かない。
cairo 1.12.6 :       1.9 / 2.0        ※ Ruby 1.9 で動かない。
cairo 1.12.7 :       1.9 / 2.0 / 2.1  ※ Ruby 1.9 で動かない。
cairo 1.12.8 :       1.9 / 2.0 / 2.1  ※ Ruby 1.9 で動かない。
cairo 1.12.9 :           / 2.0 / 2.1  ※ Ruby 1.9 で動かない。

つまり、Ruby 1.9.x で cairo を使いたかったら、1.12.4 より前のバージョンを指定してインストールしないといかんらしいです。
gem uninstall cairo
gem install cairo --platform x86-mingw32 -v=1.12.4

_Comparing v1.12.5...master - rcairo/rcairo - GitHub を眺めていたら、Drop Ruby 1.8 support なるテキストがあった。Dec 17, 2013 の時点で Ruby 1.8非対応になった、ということだろうか…。それ以前から Ruby 1.8 用の cairo.so は同梱されてないみたいではあるけど。

以上です。

過去ログ表示

Prev - 2014/05 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project