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()了。

  • 相关阅读:
    [SDOI2008]Sue的小球
    【洛谷P2611】小蓝的好友
    【YbtOJ#20051】简单游走
    【洛谷P3338】力
    【洛谷P3803】【模板】多项式乘法(FFT)
    【YbtOJ#10053】合影队形
    【YbtOJ#20056】树上取模
    【洛谷P1919】【模板】A*B Problem升级版
    初赛练习总结
    【洛谷P3723】礼物
  • 原文地址:https://www.cnblogs.com/AndreMouche/p/3284645.html
Copyright © 2011-2022 走看看