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)*;
}

重新编译安装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()了。

基于leveldb,levigo做二次开发的更多相关文章

  1. 【基于spark IM 的二次开发笔记】第一天 各种配置

    [基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...

  2. 提供基于Lesktop的IM二次开发,联系QQ:87172811

    提供基于Lesktop的IM二次开发,联系QQ:87172811

  3. SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?

    刚刚过去的在巴塞罗那举行的2019 SAP TechEd,SAP照例向全球广大的SAP生态圈从业者们传达了一些重要的信息,其中一条为:Building Extensions for the Intel ...

  4. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...

  5. 基于.NET的CAD二次开发学习笔记二:AutoCAD .NET中的对象

    1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧 ...

  6. 基于.NET的CAD二次开发学习笔记一:CAD开发入门

    1.AutoCAD .NET API由不同的DLL文件组成,它们提供用于访问图形文件或AutoCAD应用程序的包含丰富的类.结构.方法和事件.每一个DLL文件都定义不同的使用基于功能的库组织组件的命名 ...

  7. 【基于spark IM 的二次开发笔记】第二天 树形结构

    MessageTreePlugin.java final MessageTreeTab messageTreeTab = new MessageTreeTab(); /** * Adds a tab  ...

  8. 基于vlc sdk的二次开发--环境搭建、编译

    前言 关于 搭建.编译VLC,不同的平台有不同的方法,可以参考wiki. 其中在windows下编译VLC有两种方式,MSYS+MinGW和CygWin.通过测试,最后决定采用MSYS+MinGW搭建 ...

  9. 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)

    前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...

随机推荐

  1. BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4031 [题目大意] 你突然有了一个大房子,房子里面有一些房间. 事实上,你的房子可以看 ...

  2. 【CCpp程序设计2017】推箱子游戏

    我的还……支持撤销!用链表实现! 题目:推箱子小游戏(基于console) 功能要求: 将p09迷宫游戏改造为“推箱子”游戏: 在地图中增加箱子.箱子目标位置等图形: 当玩家将所有箱子归位,则显示玩家 ...

  3. 求n以内的质数的数量

  4. 第一个程序-Hello world

    创建HelloWorld项目 1.在Android Studio的欢迎界面点击Start a new Android Studio project 2.填写Application name(表示应用名 ...

  5. Problem C: 矩阵对角线求和

    #include<stdio.h> int main() { ][]; scanf("%d",&n); ,sum2=; ;i<n;i++) ;j<n ...

  6. React事件系统入门

    React基于虚拟DOM实现了一个合成事件层,我们所定义的事件处理器会接受到一个合成事件层对象的实例,它完全符合W3C标准,不会存在任何IE标准的兼容性问题.并且和原生的浏览器事件一样拥有同样的接口, ...

  7. spring boot 添加自定义属性

    1.添加jar compile('org.springframework.boot:spring-boot-configuration-processor:1.2.0.RELEASE') 2.在app ...

  8. matlab的输出流控制

    Matlab之print,fprint,fscanf,disp函数 print: print函数可以把函数图形保存成图片: minbnd = -4*pi; maxbnd = 4*pi; t = min ...

  9. Android开发高级进阶——多进程间通信

    一. 什么是多进程? 多进程就是多个进程的意思,那么什么是进程呢? 当一个应用在开始运行时,系统会为它创建一个进程,一个应用默认只有一个进程,这个进程(主进程)的名称就是应用的包名. 进程的特点: 进 ...

  10. windows 配置环境变量快捷方式

    在 Windows 设置环境变量 在环境变量中添加软件A的目录: 在命令提示框中(cmd) : 输入 path %path%;C:\A, 按下"Enter". 注意: C:\A是软 ...