CentOS に gem kyotocabinet-ruby を入れる

導入した環境

$ cat /etc/redhat-release
CentOS release 5.5 (Final)
$ ruby -v
ruby 1.8.6 (2010-02-05 patchlevel 399) [i686-linux]
$ gem -v
1.3.7

新しめの gcc が必要

gcc 4.1 ではダメ

$ gcc --version
gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-50)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

故に gcc44 をインストール

$ sudo yum -y install gcc44 gcc44-c++

kyotocabinet をインストール

$ wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.71.tar.gz
$ tar zvxf kyotocabinet-1.2.71.tar.gz
$ cd kyotocabinet-1.2.71
$ CC=gcc44 CXX=g++44 ./configure && make && sudo make install

(場合によっては) /usr/local/lib ディレクトリを ldconfig

$ sudo sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/local.conf"
$ sudo /sbin/ldconfig

gem kyotocabinet-ruby のインストール ⇒ 失敗

$ sudo gem install kyotocabinet-ruby
Building native extensions.  This could take a while...
ERROR:  Error installing kyotocabinet-ruby:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby extconf.rb
setting variables ...
  $CFLAGS = -I. -I/usr/local/include -Wall -g -O2 -O2
  $LDFLAGS = -L.  -rdynamic -Wl,-export-dynamic -L. -L/usr/local/lib
  $libs =  -lkyotocabinet -lz -lstdc++ -lrt -lpthread -lm -lc
checking for kccommon.h... yes
creating Makefile

make
g++ -I. -I/usr/local/lib/ruby/1.8/i686-linux -I/usr/local/lib/ruby/1.8/i686-linux -I. -DHAVE_KCCOMMON_H  -D_FILE_OFFSET_BITS=64 -fPIC -I. -I/usr/local/include -Wall -g -O2 -O2   -c kyotocabinet.cc
kyotocabinet.cc: In function ‘VALUE db_increment(int, VALUE*, VALUE)’:
kyotocabinet.cc:2501: 警告: converting to ‘int64_t’ from ‘double’
kyotocabinet.cc:2531: 警告: converting to ‘int64_t’ from ‘double’
kyotocabinet.cc:2547: 警告: converting to ‘int64_t’ from ‘double’
kyotocabinet.cc: In function ‘VALUE db_match_prefix(int, VALUE*, VALUE)’:
kyotocabinet.cc:3587: 警告: converting to ‘int64_t’ from ‘double’
kyotocabinet.cc: In function ‘VALUE db_match_regex(int, VALUE*, VALUE)’:
kyotocabinet.cc:3663: 警告: converting to ‘int64_t’ from ‘double’
/usr/local/include/kcmap.h: At global scope:
#
# 途中省略...
#
Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/kyotocabinet-ruby-1.27.1 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/kyotocabinet-ruby-1.27.1/gem_make.out

gccコンパイルに失敗している

gem kyotocabinet-ruby のインストール ⇒ 成功

gem install の際にも gcc44 を用いてコンパイルする

$ sudo CC=gcc44 CXX=g++44 gem install kyotocabinet-ruby
Building native extensions.  This could take a while...
Successfully installed kyotocabinet-ruby-1.27.1
1 gem installed

成功!

動作確認

$ irb
irb(main):001:0> require 'rubygems'; require 'kyotocabinet'
=> true
irb(main):002:0> KyotoCabinet
=> KyotoCabinet

ちゃんと見えてるっぽい