RMagick の ImageMagick 7 対応 作業をするにあたり Windows 環境でも簡単に使えるようにインストールまわりを昨年末くらいからやってました。備忘録がてら作業ログを残しておきます。
Ruby の Windows 環境は 2 種類存在しております。
- RubyInstaller に代表される GCC を使用する MinGW 環境
- ActiveScriptRuby のように Microsoft Visual Studio でビルドされた mswin 環境
MinGW 環境
RubyInstaller から Ruby+Devkit 2.6.0-1 をダウンロードしインストールします。
RubyInstaller なのですが途中でメンテナーが代わりパッケージング方法が変わったのか、Ruby+Devkit 2.4.5-1 とそれ以前のバージョンとで挙動が違っていました。Fix loading error on Windows という Pull Request にも書いたのですが、外部の DLL を参照する C 拡張ライブラリの require
に失敗します。
UPDATE 2018 (RMAGICK2.so Error) というブログ記事では、ImageMagick に付属している DLL を Ruby のバイナリーと同じ場所にコピーすれば解決すると書かれていました。
さすがにこれは厳しいので解決方法を半月くらいかけてちまちま探していたところ、開発元レポジトリの Wiki に DLL サーチパスを良い感じ設定してねと書かれており、なんとか解決の目星がたちました。
mswin 環境
ActiveScriptRuby と Visual Studio 2017 インストールしたところ、ActiveScriptRuby が古い Visual Studio でビルドされており ABI が一致しないとかで、RMagick がビルドができませんでした。
nurseさんの RubyをWindows上でVisual C++でビルドする2018 を参考に、Ruby をビルドするところから始めました。
ただし「VS 2017 用 x86_x64 Cross Tools コマンドプロンプト」というのでコマンドプロンプトを起動しビルドしないと、私の環境ではうまくいかなかった(Visual Studio 2017 が x86 なバージョンでインストールされていて、x64 な Ruby を作ろうとしたからだと思われますが)。
Visual Studio 2017 のコンパイラは #warning というディレクティブを解釈できないらしく、残っていたそれらをとりあえず削除したら動くようになりました。
まとめ
なんとか Windows 環境でもまともに動かす目星がつきました。