构建一个rocksdb示例程序
更新日期:
编译wwsearch 趟坑后,使用brew install rocksdb 安装了rocksdb库, 然后对照着网上代码写了一个使用rocksdb的PUT/GET操作简单程序, cmake构建。
直接上代码, 主文件为 test_rocksdb.cxx。创建rocksdb的库的路径为./testdb, db打开之后先Put一个key为key-one的值, 然后再Get操作获取相同的key, 打印出来。
1 |
|
如下是CMakeLists.txt文件的内容
1 | cmake_minimum_required(VERSION 2.8.12) |
构建过程:
1 | mkdir build && cd ./build |
由于对cmake不熟悉,很久也没有c++方面编码,也是折腾了两天。
问题1: 运行make 时提示c++语言扩展的Warning,找不到kNone等一些语法错误
/usr/local/include/rocksdb/cleanable.h:27:27: warning: deleted function definitions are a C++11 extension [-Wc++11-extensions]
Cleanable(Cleanable&) = delete;
^
解决方法是在CMakeLists.txt中添加set(CMAKE_CXX_STANDARD11), 支持c++11的语法
问题2: 找不到头文件
../c2-rocksdb/test_rocksdb.cxx:3:10: fatal error: 'rocksdb/db.h' file not found
#include "rocksdb/db.h"
^~~~~~~~~~~~~~
1 error generated.
解决方法:
1 | find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h |
问题3: 链接失败
[ 50%] Building CXX object CMakeFiles/Test_rocksdb.dir/test_rocksdb.cxx.o
[100%] Linking CXX executable Test_rocksdb
Undefined symbols for architecture x86_64:
"rocksdb::ReadOptions::ReadOptions()", referenced from:
_main in test_rocksdb.cxx.o
解决方法:
1 | find_library(ROCKSDB_LIB rocksdb) |
运行程序
编译成功之后,./Test_rocksdb 运行程序,结束之后会在当前目录多出一个testdb目录。其中OPTIONS-000005文件中是ini格式的配置文件, LOG为rocksdb打印的日志。
000003.log
CURRENT
IDENTITY
LOCK
LOG
MANIFEST-000001
OPTIONS-000005