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
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
ちゃんと見えてるっぽい