2018年4月25日 星期三

Google LevelDB原始碼解說 (零) 安裝LevelDB

LevelDB的安裝在許多部落格都有解說了,但因為最近才支援cmake的緣故,資料比較少,所以在這裡進行解說。

在這裡使用centos 6

若尚未安裝cmake套件,請參考以下方法

# wget https://cmake.org/files/v3.11/cmake-3.11.1.tar.gz
# tar xvf cmake-3.11.1.tar.gz
# cd cmake-3.11.1
# ./bootstrap

編譯安裝

# gmake
以上注意,gcc需要版本4.8以上,才有支援C++11,不然會報錯 

更新gcc可以參考以下網址(必須先有舊版本gcc)
https://edwards.sdsu.edu/research/c11-on-centos-6/

下載原始碼

# git clone https://github.com/google/leveldb.git
# cd leveldb
# mkdir -p build
# cd build
# cmake ..
# make

程式試跑

編譯完成後,我們建立一個自己的資料夾來儲存自己的程式,來使用LevelDB
寫一個程式名為 app_test.cc
# cd leveldb
# mkdir -p app

#include "leveldb/db.h"
#include <cassert>
#include <iostream>

using namespace std;
using namespace leveldb;

int main() {
    leveldb::DB *db;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status status = leveldb::DB::Open(options, "testdb", &db);
    assert(status.ok());
    status = db->Put(WriteOptions(), "P76061433", "QK");
    assert(status.ok());
    string res;
    status = db->Get(ReadOptions(), "P76061433", &res);
    assert(status.ok());
    cout << res << endl;

    delete db;
    return 0;
}
接下來修改leveldb/CMakeLists.txt文件
  leveldb_test("${PROJECT_SOURCE_DIR}/db/c_test.c")
  leveldb_test("${PROJECT_SOURCE_DIR}/db/fault_injection_test.cc")

  leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue178_test.cc")
  leveldb_test("${PROJECT_SOURCE_DIR}/issues/issue200_test.cc")

  leveldb_test("${PROJECT_SOURCE_DIR}/util/env_test.cc")
  leveldb_test("${PROJECT_SOURCE_DIR}/util/status_test.cc")

  if(NOT BUILD_SHARED_LIBS)
+   leveldb_test("${PROJECT_SOURCE_DIR}/app/app_test.cc")
    leveldb_test("${PROJECT_SOURCE_DIR}/db/autocompact_test.cc")
    leveldb_test("${PROJECT_SOURCE_DIR}/db/corruption_test.cc")
    leveldb_test("${PROJECT_SOURCE_DIR}/db/db_test.cc")
    leveldb_test("${PROJECT_SOURCE_DIR}/db/dbformat_test.cc")
    leveldb_test("${PROJECT_SOURCE_DIR}/db/filename_test.cc")
修改這行就完成了,因為CMakeLists.txt發生變動,所以需要重新改動
# cd leveldb/build
# cmake ..
# make
如此就可以執行app_test了,執行結果如下
# ./app_test
QK
可以看到value輸出為QK,代表成功囉!

沒有留言:

張貼留言

熱門文章