ubuntu8.04にtokyocabinetインストール

aptで入る奴が古かったのでソースから入れる。
configureでbzlib.hが見つからなかったが、libbz2-devに入っていた。

wget http://downloads.sourceforge.net/project/tokyocabinet/tokyocabinet/1.4.32/tokyocabinet-1.4.32.tar.gz
sudo apt-get install zlibc libbz2-dev
tar -zxvf tokyocabinet-1.4.32.tar.gz
cd tokyocabinet-1.4.32
./configure
make
sudo make install
sudo gem install tokyocabinet


で、rubyスクリプトからrequire 'tokyocabinet'して使おうとするとエラーが出る。

/usr/lib/ruby/gems/1.8/gems/tokyocabinet-1.29/./tokyocabinet.so: libtokyocabinet.so.8: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/tokyocabinet-1.29/./tokyocabinet.so (LoadError)
        from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
        from tokyocabinet-test.rb:4

libtokyocabinet.soもtokyocabinet.soも、ちゃんと/usr/local/lib/以下に置いてあるのに読み込まれない。


エラーでぐぐったら解決した
TokyoCabinetのRubyバインディングでLoadErrorが発生した際の解決 - 森薫の日記


/etc/ld.so.conf を編集、/usr/local/libを追加

include /etc/ld.so.conf.d/*.conf

/usr/local/lib


変更を有効にする

sudo /sbin/ldconfig

試す。
tokyocabinet-test.rb

#!/usr/bin/ruby
# -*- coding: utf-8 -*-
require 'rubygems'
require 'tokyocabinet'
require 'ArgsParser'
include TokyoCabinet

parser = ArgsParser.parser
parser.bind(:key, :k, "key")
parser.bind(:value, :v, "value")
parser.bind(:help, :h, "show help")
parser.parse(ARGV)

if parser.has_option(:help) or !parser.has_param(:key)
  puts parser.help
  puts 'put:  ruby tokyocabinet-test.rb -key name -value shokai'
  puts 'get:  ruby tokyocabinet-test.rb -key name'
  exit 1
end

hdb = HDB.new
hdb.open('tc.hdb', HDB::OWRITER | HDB::OCREAT) # カレントディレクトリにDBができる

params = parser.params
if !parser.has_param(:value)
  puts hdb.get(params[:key])
else
  hdb.put(params[:key], params[:value])
end

hdb.close

試す

ruby tokyocabinet-test.rb -k name -v shokai
ruby tokyocabinet-test.rb -k name