zoukankan      html  css  js  c++  java
  • 基于leveldb,levigo做二次开发

    Leveldb是一个C++库,它有提供标准的C接口,头文件在include/leveldb/c.h中

    levigo是leveldb 的一个go wrapper,它主要基于Leveldb中inlude/leveldb/c.h提供的方法做二次开发

    开发过程,以添加一个简单的计算功能为例:

    修改leveldb源码

    在include/leveldb/c.h中添加以下声明:

    extern int andre_add(const int a,const int b);

    在db/c.cc中添加andre_add对应的实现:

    int andre_add(const int a,const int b) {
           return (a + b)*3;
    }

    重新编译安装Leveldb源码:

    fun@fun:~/workspace/study/leveldb/leveldb$ make clean && make
    fun@fun:~/workspace/study/leveldb/leveldb$ sudo cp libleveldb.a libleveldb.so.1.12 /usr/lib/
    fun@fun:~/workspace/study/leveldb/leveldb$ sudo cp -r include/leveldb /usr/include/

    至此,Leveldb库安装完毕。

    Levigo二次开发:

    为了方便开发,我将https://github.com/jmhodges/levigo fork了一份到自己的帐号下

    执行以下操作将levigo安装到本地:

    go  get github.com/AndreMouche/levigo/

    在$GOROOT下找到对应的源码,这里以修改options.go为例,在其中添加以下function以调用andre_add:

    func Andre_add(a,b int) int {
        pa := C.int(a)
        pb := C.int(b)
        return int(C.andre_add(pa,pb))
    }

    保存后,重新编译该代码:

    fun@fun:~/software/go/go/bin/src/github.com/AndreMouche/levigo$ go clean github.com/AndreMouche/levigo
    fun@fun:~/software/go/go/bin/src/github.com/AndreMouche/levigo$ go build github.com/AndreMouche/levigo

    编译通过,向github提交修改文件

    至此,在go中便可调用levigo.Andre_add()了。

  • 相关阅读:
    B. Vova and Trophies 字符串预处理+思维+贪心
    Got error 28 from storage engine
    TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    mysql复制问题
    upgrade mysql
    replica set remove member
    Perl安装及环境配置
    Django
    mongo collection name—SyntaxError: identifier starts immediately after numeric literal
    MySQL 单表flashback
  • 原文地址:https://www.cnblogs.com/AndreMouche/p/3284645.html
Copyright © 2011-2022 走看看