BLOGTIMES
2010/08/07

CentOS 5.5 (ruby 1.8.5) に hpricot 0.8.2 をインストールする

  ruby  centos5  rhel 
このエントリーをはてなブックマークに追加

CentOS上にgemでhpricotの最新板をインストールしようとすると、変なエラーが出てインストールができないと相談されたので、コンソールを見てみると確かに見慣れないエラーが出ています。

# gem install hpricot Building native extensions. This could take a while... ERROR: Error installing hpricot: ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb checking for main() in -lc... yes creating Makefile make gcc -I. -I. -I/usr/lib64/ruby/1.8/x86_64-linux -I. -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wall -fno-strict-aliasing -fPIC -c hpricot_scan.c hpricot_scan.rl: In function ‘our_rb_hash_lookup’: hpricot_scan.rl:171: 警告: implicit declaration of function ‘st_lookup’ hpricot_scan.rl: In function ‘make_hpricot_struct’: hpricot_scan.rl:695: 警告: implicit declaration of function ‘RARRAY_PTR’ hpricot_scan.rl:695: error: 添字をつけられた値が配列でもポインタでもありません make: *** [hpricot_scan.o] エラー 1 Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/hpricot-0.8.2 for inspection. Results logged to /usr/lib64/ruby/gems/1.8/gems/hpricot-0.8.2/ext/hpricot_scan/gem_make.out

Googleで検索してみると、同じようなところではまっている人は意外と多いようで、「Hpricot 0.8.1 on ruby 1.8.5 | Penguin on Rails」なんかが同じ症状のようです。これらの解決方法としては Version 0.7 を使えばいいよみたいなことが多いので、なんとか最新板がインストールできないか試行錯誤してみました。

作業環境

今回の作業環境はこんな感じ。

# cat /etc/issue CentOS release 5.5 (Final) Kernel \r on an \m # ruby -v ruby 1.8.5 (2006-08-25) [x86_64-linux] # gem -v 1.3.4

RARRAY_PTRというマクロ関数がないのが問題らしい

エラーを見る限りは RARRAY_PTR が何らかのマクロ関数になっていて、それが定義されていないということが原因に見えたので、Ruby関連のヘッダが格納されている下記のディレクトリを検索してみましたが、 RARRAY_PTR が定義されているファイルは発見できませんでした。

/usr/lib/ruby/1.8/i386-linux/ /usr/lib64/ruby/1.8/x86_64-linux/

おそらく1.8.5以降のバージョンでRARRAY_PTRというマクロが追加されたのだろうと踏んで、かなり乱暴ですが前述のサイトに記載されていたマクロの内容を参考にruby.hに下記の定義を追加してしまいました

/usr/lib/ruby/1.8/i386-linux/ruby.h /usr/lib64/ruby/1.8/x86_64-linux/ruby.h

ruby_macroadd.patch

--- ruby.h.org 2006-08-07 12:43:42.000000000 +0900 +++ ruby.h 2010-08-07 20:22:14.000000000 +0900 @@ -731,4 +731,16 @@ } /* extern "C" { */ #endif +#ifndef RARRAYPTR +# define RARRAYPTR(v) RARRAY(v)->ptr +#endif + +#ifndef RARRAY_PTR +# define RARRAY_PTR(v) RARRAY(v)->ptr +#endif + +#ifndef RSTRUCT_PTR +# define RSTRUCT_PTR(v) RSTRUCT(v)->ptr +#endif + #endif /* ifndef RUBY_H */

この状態でコンパイルしてみる

この状態で、最新版が無事インストールできました。

# gem install hpricot Building native extensions. This could take a while... Successfully installed hpricot-0.8.2 1 gem installed Installing ri documentation for hpricot-0.8.2... Installing RDoc documentation for hpricot-0.8.2...

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3719
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン