Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

Omnivoreというのを作り始めた

新しいTokyo Tyrantで遊んでみてなんとなく動いた記録」で書いたようなことをやっていて、ストレージにLux IOを使わせてもらったものの、決め打ちなのが微妙だなあと思ったので、C++の練習にちょうどいいかなってんで、各種DBMを抽象化したライブラリ的なものを書いてみようと思いました。Omnivoreという名前をとりあえずつけました。「雑食性の」とかいう意味です。C++の練習もそうですが、C/C++のプロジェクトとしてひと通りの形をなすよう、autotoolsとかの使い方も練習したいところです。

インタフェイス的には、こんな感じで使えるようになればなーと思います。

std::string key("foo");
std::string value("bar");
Omnivore::Storage *db = new Omnivore::Storage("LuxIO");

db->open("test");
db->put(key, key.length(), value, value.length());
Omnivore::Storage::data_t *result = db->get(key, key.length());
std::cout << "key: " << key << std::endl;
std::cout << "val: " << result->data << std::endl;
db->close();
db->free();

とはいえ、test/luxio.cppをビルドしてみたところ、下記のようなエラーが出てよくわかんなくてまだ全然動きませんが。

$ g++ -lluxio -o luxio.o test/luxio.cpp
Undefined symbols:
  "vtable for Omnivore::Storage::LuxIO", referenced from:
      __ZTVN8Omnivore7Storage5LuxIOE$non_lazy_ptr in ccR4JKKH.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

追記 2009-05-15

↓じゃないとだめでした。あほか……。

$ g++ -lluxio -o omnivore-storage test/luxio.cpp src/luxio.cpp