mieki256's diary



2022/07/31() [n年前の日記]

#1 [ruby] ruby-gtk2がWindows10上で動かない

ruby-gtk2 (Ruby-GNOME2?) がWindows10 x64 21H2上で動かなくて悩んでいるところ。環境は、RubyInstaller版の Ruby 2.3.3 x86、Ruby 2.6.10 x86、Ruby 3.0.4 x86。

_RubyInstaller for Windows
_RubyGems.org

結論を先に書くと、上記の環境では ruby-gtk2 をインストールすることができなかった。ただ、Ruby 1.8.7 x86 + gtk2 なら、かろうじてインストールできた。

ruby-gtk2を動かしたい理由。 :

どうして ruby-gtk2 を動かそうとしているのかというと、ruby-gtk2 を使えば xscreensaver用のスクリーンセーバを書けそうだなと思いついたから。

ここ数日、Python を使って xscreensaver用のスクリーンセーバを書けないものかと試行錯誤していたのだけど、Python + PyGTK で書かれた雛形ソースは存在するものの、Python + PyGObject で書かれたものは見当たらなくて手詰まりになっていて。

_A Python screensaver for xscreensaver (Linux) | alvinalexander.com

今時の Linux は、Python から GTK2 を制御するモジュール、PyGTK を本気で殺しにかかっていて、各ディストリの公式リポジトリにパッケージが用意されてない上に、「PyGTK を使っているPythonスクリプトは GTK3 を制御する PyGObject で書き直せ」という風潮にもなっている。しかし、自分の知識では、前述のスクリプトを PyGObject を使った形に書き直すことができず…。

何かヒントが無いかとググっていたら、ruby-gtk2 を使って xscreensaver用のスクリーンセーバを書いてる事例を見かけたわけで。

_zhum/rubysaver: Xscreensaver module, displaying weather, forecast, clock and now playing song title and author.

「そうか。Python がダメなら Ruby と GTK2 を使えばいいんじゃん」と気づいたわけで。できればメジャーな Python を使って書きたかったけれど、マイナーな Ruby を使ったとしても C/C++ で書くより随分と楽になるはずだよなと。

しかし…。まずは Windows10 上で ruby-gtk2 を勉強すべく環境を整えようとしたところ、そもそも ruby-gtk2 のインストールすらできない状態になっていることに気づいたという…。

ruby-gtk2のインストールができない。 :

再度書くけど、環境は Windows10 x64 21H2 + Ruby 2.3.3、2.6.10、3.0.4 x86。

_gtk2 | RubyGems.org

  • Ruby 2.6.10 p210 i386-minge32 で gem install gtk2 をしたら msys2利用のビルド時にエラーが出る。
  • Ruby 3.0.4 p208 i386-mingw32 でも同様。
  • Ruby 2.3.3 p222 i386-mingw32 でも同様。最新版はビルド時にエラーが出る。

ただ、日記を検索したら、昔は Windowsでも ruby-gtk2 のインストールができて、かつ、動作していたようでもあり…。

_2018/02/27 Ruby-GNOME2を試用
_2019/04/20 green_shoes を動かせないか試したり

2018年、2019年頃なら、Ruby 2.3.3 p222 x86 上で、gtk2 3.2.1、glib2 3.2.1、cairo 1.15.11 x86-mingw32版をインストールできていた模様。x86-mingw32 の記述があるパッケージはバイナリ(.soファイル)も含まれているから、msys2 でビルドしなくて済むし、インストール時にエラーも出なかったのだろう。たぶん。

であれば、バージョンと platform を指定すればインストールできるのではないかと、Ruby 2.3.3 p222 x86上で試してみたのだけど。

gem install pkg-config -v 1.2.9
gem install native-package-installer -v 1.0.6

gem install cairo -v 1.15.11 --platform=x86-mingw32
gem install glib2 -v 3.2.1 --platform=x86-mingw32
gem install atk -v 3.2.1 --platform=x86-mingw32
gem install gobject-introspection -v 3.2.1 --platform=x86-mingw32
gem install gio2 -v 3.2.1 --platform=x86-mingw32
gem install gdk_pixbuf2 -v 3.2.1 --platform=x86-mingw32

gem install cairo-gobject -v 3.2.1 --platform=x86-mingw32
gem install pango -v 3.2.1 --platform=x86-mingw32
gem install gtk2 -v 3.2.1 --platform=x86-mingw32

何故か、最後の3つ、cairo-gobject、pango、gtk2 のインストール時に、cairo 1.17.6 をビルド + インストールしようとしてエラーが出てしまう。既に cairo 1.15.11 をインストールしてあるから、cairo 1.17.6 のビルドはしなくてもよさそうなものだけど…。

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

> gem install cairo-gobject -v 3.2.1 --platform=x86-mingw32
Temporarily enhancing PATH to include DevKit...
Building native extensions. This could take a while...
ERROR:  Error installing cairo-gobject:
        ERROR: Failed to build gem native extension.

    current directory: C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.17.6/ext/cairo
C:/Ruby/Ruby23-x86/bin/ruby.exe -I C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0 -r ./siteconf20220731-10340-gvbbgt.rb extconf.rb
checking for GCC... yes
checking for Homebrew... no
checking for cairo version (>= 1.2.0)... no
*** 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:/Ruby/Ruby23-x86/bin/$(RUBY_BASE_NAME)
        --with-pkg-config
        --without-pkg-config
        --with-override-variables
        --without-override-variables

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/cairo-1.17.6/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.17.6 for inspection.
Results logged to C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/cairo-1.17.6/gem_make.out


であればと、rubygems から、バージョン 3.2.1 の 各 .gem をWebブラウザ経由でダウンロードして、ローカルでインストールしてみたところ、そのやり方ならインストールはできた。

gem install cairo-gobject-3.2.1-x86-mingw32.gem
gem install pango-3.2.1-x86-mingw32.gem
gem install gtk2-3.2.1-x86-mingw32.gem

しかし、動作確認してみたら別の問題が発生。require "cairo" をすると、「LoadError: cannot load such file -- cairo.so」とエラーが出る…。

> irb
irb(main):001:0> require "cairo"
LoadError: cannot load such file -- cairo.so
        from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:85:in `require'
        from C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.15.11-x86-mingw32/lib/cairo.rb:54:in `rescue in <top (required)>'
        from C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.15.11-x86-mingw32/lib/cairo.rb:50:in `<top (required)>'
        from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:160:in `require'
        from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:160:in `rescue in require'
        from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:170:in `require'
        from (irb):1
        from C:/Ruby/Ruby23-x86/bin/irb.cmd:19:in `<main>'

cairo-1.15.11-x86-mingw32/lib/ 以下に、2.3/cairo.so はあるのだけどな…。何にせよ、require "gtk2" をした時も「cairo.so が読み込めない」とエラーが出てしまうので、これでは ruby-gtk2 が使えない。

Ruby本体がおかしくなっているのかと疑って、Ruby 2.3.3 p222 x86 をアンインストール・再インストールして、その後、ローカルに保存した .gem を順々にインストールして再度動作確認してみたけれど、やはり cairo.so が読み込めないと言ってくる。うーん。

ちなみに、Ruby 2.3.3 のインストールは以前のメモを参考にして作業した。

_Windows10上で Ruby 2.3.3 をインストールしようとして少しハマった

余談。Ruby 2.6.10 x86 上で gem install cairo をしたところ、cairo 1.17.6 のビルドに成功してインストールできたように見えた。require "cairo" もできている。ただ、Ruby 2.6.10 は gtk2 のビルドでエラーを出してインストールできないのだけど…。

Debian Linux の ruby-gtk2 パッケージを確認したら 3.4.3 を配布しているように見えた。ひょっとすると 3.4.3 ならインストールできるのではないかと思えてきた。そこで、Ruby 2.6.10 x86 上で、glib2 や gtk2 に対して -v 3.4.3 を指定してインストールを試みてみた。

gem install cairo
gem install glib2 -v 3.4.3
gem install atk -v 3.4.3
gem install gobject-introspection -v 3.4.3
gem install gio2 -v 3.4.3
gem install gdk_pixbuf2 -v 3.4.3
gem install cairo-gobject -v 3.4.3
gem install pango -v 3.4.3
gem install gtk2 -v 3.4.3

しかし、最後の最後、gtk2 3.4.3 のビルドでエラーが大量に出てしまう。やはり Windows10 上で ruby-gtk2 のインストールはできない模様。

何が何でもruby-gtk2を動かす。 :

glib2 や gtk2 のバージョンを色々変えて何度試してもエラーが出てインストールできないので、もはや意地になってきた。何が何でも Windows10上で ruby-gtk2 を動かしてみたい。

もしかすると、Ruby 1.8 + ruby-gtk2 なら動かせるかもしれない…。Ruby 1.8 の時代なら、GTK2のランタイムバイナリも含めた形のセットアップファイルが配布されていたらしいので…。

そんなわけで、Windows10 x64 21H2 + Ruby 1.8.7 mswin32 版上で利用できるか試してみた。Ruby 1.8.7 mswin32 がインストールされている環境で、以下から、ruby-gnome2-0.16.0-1-i386-mswin32.exe を入手する。

_Ruby-GNOME 2 - Browse /ruby-gnome2/ruby-gnome2-0.16.0 at SourceForge.net

ちなみに、この ruby-gnome2-0.16.0-1-i386-mswin32.exe は Ruby 1.8 のみに対応。Ruby 1.9 や 2.x では動かない。Ruby 1.8 用のバイナリしか同梱されてない状態なので…。

  • 実行すると、GUIでインストールウイザード画面が開く。
  • Choose Components 画面では、Ruby-GNOME2 と GTK2 Runtime にチェックを入れて、Register Environment Variables はチェックを外した状態に。
  • インストールフォルダは、Ruby 1.8.7 インストールフォルダを指定。(例 : C:\Ruby187 , C:\Ruby\Ruby187p330mswin32 等々)
  • 先に進んで、Installボタンをクリックすればインストールされる。

一応、ruby-gnome2-0.16.0-1-i386-mswin32.exe を実行した際の、セットアップ画面のスクリーンショットも載せておく。

ss_001.png

ss_002.png

ss_003.png

ss_004.png

ss_005.png


インストール後、以下を実行できれば gtk2 のインストールは成功している。

> ruby -r gtk2 -e "p Gtk::VERSION"
[2, 10, 6]

Rubyのコマンドラインオプションについては以下が参考になる。

_Rubyの起動 - Rubyリファレンスマニュアル

以上です。

過去ログ表示

Prev - 2022/07 - 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