基于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)*;
}
重新编译安装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做二次开发的更多相关文章
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- 提供基于Lesktop的IM二次开发,联系QQ:87172811
提供基于Lesktop的IM二次开发,联系QQ:87172811
- SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
刚刚过去的在巴塞罗那举行的2019 SAP TechEd,SAP照例向全球广大的SAP生态圈从业者们传达了一些重要的信息,其中一条为:Building Extensions for the Intel ...
- NX二次开发-使用NXOPEN C++向导模板做二次开发
版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...
- 基于.NET的CAD二次开发学习笔记二:AutoCAD .NET中的对象
1.CAD对象:一个CAD文件(DWG文件)即对应一个数据库,数据库中的所有组成部分,看的见(包括点.多段线.文字.圆等)和看不见(图层.线型.颜色等)的都是对象,数据库本身也是一个对象. 直线.圆弧 ...
- 基于.NET的CAD二次开发学习笔记一:CAD开发入门
1.AutoCAD .NET API由不同的DLL文件组成,它们提供用于访问图形文件或AutoCAD应用程序的包含丰富的类.结构.方法和事件.每一个DLL文件都定义不同的使用基于功能的库组织组件的命名 ...
- 【基于spark IM 的二次开发笔记】第二天 树形结构
MessageTreePlugin.java final MessageTreeTab messageTreeTab = new MessageTreeTab(); /** * Adds a tab ...
- 基于vlc sdk的二次开发--环境搭建、编译
前言 关于 搭建.编译VLC,不同的平台有不同的方法,可以参考wiki. 其中在windows下编译VLC有两种方式,MSYS+MinGW和CygWin.通过测试,最后决定采用MSYS+MinGW搭建 ...
- 基于redis实现tomcat8及以上版本的tomcat集群的session持久化实现(tomcat-redis-session-manager二次开发)
前言: 本项目是基于jcoleman的tomcat-redis-session-manager二次开发版本 1.修改了小部分实现逻辑 2.去除对juni.jar包的依赖 3.去除无效代码和老版本tom ...
随机推荐
- JZYZOJ 1360 [usaco2011feb]人品问题 DP 树状数组 离散化
http://172.20.6.3/Problem_Show.asp?id=1360 好想好写 代码 #include<iostream> #include<cstdio&g ...
- Problem G: 部分复制字符串
#include <stdio.h> #include <string.h> int main() { void copystr(char *,char *,int); int ...
- Redis源码解析之ziplist
Ziplist是用字符串来实现的双向链表,对于容量较小的键值对,为其创建一个结构复杂的哈希表太浪费内存,所以redis 创建了ziplist来存放这些键值对,这可以减少存放节点指针的空间,因此它被用来 ...
- 5分钟上手TypeScript
安装TypeScript 安装这个工具有两种方式: 用npm安装npm install -g typescript 安装visual studio的TypeScript插件 编译TypeScript ...
- Node.js的http模块理解
Node.js标准库提供了http模块,其中封装了一个高效的HTTP服务器和一个简易的HTTP客户端. http.Server是一个基于事件的HTTP服务器,它的核心由C++编写,兼顾高性能和简易性 ...
- Inno Setup入门(十九)——Inno Setup类参考(5)
单选按钮 单选按钮在安装中也很常见,例如同一个程序可以选择安装不同的性质的功能,例如选择32位或者64位等,两者是排他性的,因此可以通过单选按钮(RadioButton)来实现,在同一个容器中放置的单 ...
- Windows 10新增的6个快捷键:
Win+方向箭头:调整窗口贴边位置 Alt+Tab:切换窗口,按住不松时会有一个全新的界面方便你在不同的窗口间选择 Win+Tab:切换任务,这个松开后界面不会消失 Win+Ctrl+D:创建新的虚拟 ...
- 课程学习:Linux系统管理
版本 内核版本 发行版本 常见Linux发行版本 ubuntu: 易用,可靠:技术支持付费,生态稍弱 debin: 精简,稳定,可靠; 更新较慢, 无技术支持,软件过时, 企业不太用 opensuse ...
- 【maven】maven项目移除Maven Dependencies后如何再添加进去
比较着急这几天弄一个项目,所以匆忙间把maven项目的Maven Dependencies给remove掉了 如下图: 这下可好,整个项目报错了 解决方法: 对比了有Maven Dependencie ...
- Oracle的sqlnet.ora文件配置
DBA对这个文件一定不会陌生,大家了解最多的也一定是sqlnet.ora用来决定oracle怎么解析一个连接中出现的字符串,例如: sqlplus sys/oracle@orcl 那么这个orcl怎么 ...