2014/12/6 追記
RMagick 2.13.4 にて下記の内容は取り込まれています。
2.13.4 をインストールできない場合は、下記の内容とは別の問題ということになります。
この前にひき続き Ruby 2.0 x64 ネタ。
本日は、RMagick。
# 今回はかなり無理矢理で手順がややこしいので、
# 後日 GitHub あたりで、それなりに対応したものを公開するかも……。
2013/12/27 追記
修正したソースを GitHub 上に用意しました。
詳細は→Windows 7 に Ruby 2.0 x64 を その3 ~RMagick が入らない問題と対策2~
手順がだいぶ簡単になっています。
インストール時の 2 つの問題
Ruby 2.0 x64 版で RMagick をインストールするには 2 つの問題があります。
- ImageMagick の X11.lib が読み込めない (x64 固有の問題)
- ImageMagick の deprecated (非推奨)となった関数、定数が読めない(x86 でも起こる共通の問題)
後者のせいで、ImageMagick の最新版を使用できない状態になっています。
それぞれの問題の対策は以下のとおりです。
- X11.lib をリンクさせようとしている箇所を削除!
- ImageMagick のソースから deprecated (非推奨)となった関数、定数をひっぱってきてリンクする
前提
[問題 1] ImageMagick の X11.lib が読み込めない
まず、何も考えずに gem install rmagick する。
すると以下のようなエラー。
ERROR: Error installing rmagick:
ERROR: Failed to build gem native extension.
C:/ruby/bin/ruby.exe extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... *** 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.
詳細を確認するために mkmf.log を見ると、cannot find -lX11 というエラーメッセージがひろえます。
c:/ruby/devkit/mingw/bin/../lib/gcc/x86_64-w64-mingw32/4.7.2/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lX11
collect2.exe: error: ld returned 1 exit status
公式で配布されている ImageMagick x64 のバイナリですが、X11.lib のみ何故か x86 用です。
なので x64 環境だと、x64 バイナリじゃねーから X11.lib は読めねーよ!と怒られてしまいます。
そもそも RMagick のソース見ても、X11.lib の内容を使用している形跡がないので、
リンクする必要ないです。(なんでリンクしとるの??過去バージョンでは必須だったのかな)
なので、サクッと削除!
[対策 1] X11.lib をリンクさせようとしている箇所を削除!
$LOCAL_LIBS = '-lCORE_RL_magick_ -lX11' #before
$LOCAL_LIBS = '-lCORE_RL_magick_' #after
-lX11 というのを消してあげるだけです。
[問題 2] ImageMagick の deprecated (非推奨)となった関数、定数が読めない
RMagick 2.13.2 は、最新の ImageMagick では非推奨となった関数、定数を使っています。
また ImageMagick 公式サイトで配布されているのバイナリだと、
非推奨の関数、定数は使用できない状態になっている模様。
なので、使用するためには以下 3 つの対策のどれかをする必要があります。
- 非推奨の関数、定数を使用できる状態にして ImageMagick のライブラリを自前でコンパイル
- RMagick で native build する時、非推奨の関数、定数が定義されたソースを一緒にコンパイル
- 非推奨の関数、定数を使用しないよう書きかえる
1 つめは、MFC が必須なので今回はパス。
(Windows Driver Kit をインストールすれば、MFC は用意できますがめんどう。)
2 つめは、ImageMagick のソースから非推奨の関数がまとめられているソースをひっこぬいて
RMagick のビルド時にコンパイル、リンクしてあげる方法で、今回はこれを採用。
# 3 つめは、これがあるべき姿なので後日できたらいいな。
[対策 2] ImageMagick のソースから deprecated (非推奨)となった関数、
定数をひっぱってきてリンクする
ソースの入手先。
ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/
ImageMagick からひっこぬくソース。
- magick\deprecate.h
- magick\deprecate.c
上の 2 ファイルを {ruby インストール先}\lib\ruby\gems\2.0.0\gems\rmagick-2.13.2\ext\RMagick\ にコピーしてあげてください。
そしてその中にある 3 ファイル編集します。
#undef MagickExport
#define MagickExport
#undef MAGICKCORE_EXCLUDE_DEPRECATED
#undef _MAGICKCORE_DEPRECATE_H
#include "deprecate.h"
#undef MAGICKCORE_EXCLUDE_DEPRECATED
#undef _MAGICKCORE_DEPRECATE_H
#include "deprecate.h"
その後はビルド、インストールするだけです。
DEVELOPMENT KIT のインストールディレクトリにある msys.bat を実行してください。
コマンドプロンプトが出てきますので、以下のコマンドを入力してビルド、インストールしてください。
cd {ruby インストール先}/lib/ruby/gems/2.0.0/gems/rmagick-2.13.2/
ruby setup.rb
ruby setup.rb install
以上でインストール完了です。
ただし、このままだと gem list --local をしても、RMagick がでてきません。
気になる方は、
{ruby インストール先}\lib\ruby\gems\2.0.0\gems\rmagick-2.13.2\rmagick.gemspec
を下のディレクトリにコピーすれば gem list --local ででてきます。
{ruby インストール先}\lib\ruby\gems\2.0.0\specifications\
2013/12/26
|
カテゴリ:Ruby
|
トラックバック(0)
|
コメント(0)