はじめは、C++11のハッシュテーブル(unordered_map)を使おうと思ったのだが、
永続化の処理を書いたりする必要があるなど、大変にプログラムを書くのに時間が掛かる事が判明したので、
先人の書いた素晴らしいコードを利用させてもらおうと思う。(しかも自分で書くより処理が速い。はず。)
環境:
win7x64にインストールしたVirtualBox上の
CentOS7
LevelDBをつかってみた
を大いに参考にした……のに つまずいた。
①
geditのショートカットキーからbuildできなかった。
[致命的エラー: /usr/local/include/leveldb/db.h: 許可がありません]
→権限が足りないらしいので、スーパーユーザーになる必要がある。
→[makefile]を作成したディレクトリ上で、右クリック→[端末の中に開く(E)]
→[su]コマンドでsuper userになる。
→[make]コマンドでbuild
あるいは、始めからrootでログインしておけばいけるかもしれない。
今度試してみる。
→できた。(当然ではあるが)
②
参考にしたサイトで、一部
int main(int argc, char *argv) {
となっているが、たぶん
int main(int argc, char *argv[]) {
かな?
③
[`leveldb::Options::Options()' に対する定義されていない参照です]
[`leveldb::DB::Open(leveldb::Options const&, std::string const&, leveldb::DB**)' に対する定義されていない参照です]
→コンパイルオプションを付けるのを忘れていた。
[ /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/ ]
を追加。
ところで、
「include/db.h」の説明に
「
// Open the database with the specified "name".
// Stores a pointer to a heap-allocated database in *dbptr and returns
// OK on success.
// Stores NULL in *dbptr and returns a non-OK status on error.
// Caller should delete *dbptr when it is no longer needed.
」
とあるので、データベースを使い終わったら、データベースポインタを
「leveldb::DB* dbptr;」→「delete dbptr;」しておくのを忘れないように。
0 件のコメント:
コメントを投稿