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