lua pbc
先要将proto文件编译成.pb文件,然后再动态绑定实现lua protobuffer,这就需要了解云风做的pbc的项目,地址为:https://github.com/cloudwu/pbc/blob/master/binding/lua/README.md
具体的方式是,下载pbc的项目;在pbc/binding/lua下面编译出protobuf.so放在LUA_PATH下面,或者将protobuf.lua放在
LUA_PATH下,就可以调用protobuf中的库方法
cd pbc/binding/lua
make 如果提示-fPIC
-->删去pbc-master/build/o下的所有文件
-->修改pbc-master/Makefile 中的CFLAGS = -O2为CFLAGS = -O2 -fPIC
然后就在pbc-master目录下make
cd pbc/binding/lua
make 如果提示liblua.a XXX -fPIC
那么唯有重新编译一次lua了。
-->cd lua-5.1.4/src
-->修改Makefile中的CFLAGS= -O2 -Wall $(MYCFLAGS)为CFLAGS= -O2 -Wall $(MYCFLAGS) -fPIC
-->cd ..
-->make linux
-->sudo make install cd pbc/binding/lua
make
-->编译成功
具体的调用方法在pbc的项目中有例子说明,主要的思路是:
1. require "protobuf"
2. 注册pb文件,利用该文件decode或者encode它的protobuffer对象,见下面的例子:
echo "package test" > test.proto
echo "message Mytest {optional sint64 testid=1;}" >> test.proto
protoc --descriptor_set_out test.pb test.proto
以上方法生成了pb文件,下面的方法是用lua对pb的decode和encode过程
pb = require "protobuf"
protobuf.register_file("./test.pb")
stringbuffer = pb.encode("test.Mytest",
{
testid = 10; })
result = pb.encode("test.Mytest", stringbuffer)
print("result="..result.testid) 这只是云风提供的方法之一,lua对pb的decode和encode过程的方法之二如下:
file = io.open("./test.pb", "rb")
buffer = file:read "*a"
file:close()
pb.register(buffer)
stringbuffer = pb.encode("test.Mytest",
{
testid =100;
})
result = pb.decode("test.Mytest", stringbuffer)
print("result="..result.testid)
云风还提供了第三种方法,是用Lua parser,因为这种方法需要用到lua 的 Lpeg模块,暂时还没有研究这个功能,等后面再补上。
lua pbc的更多相关文章
- protobuf中的枚举缺省值应该为UNKNOWN
protobuf中的枚举缺省值应该为UNKNOWN(金庆的专栏)proto3中的枚举值为了与proto2兼容,要求缺省值固定为第1个,值为0.proto2中并没有规定对范围之外的枚举值的处理,而pro ...
- 在Quick-cocos2dx中使用云风pbc解析Protocol Buffers,支持win、mac、ios、android
本例主要介绍 如何将 pbc 集成到quick-cocos2dx框架中,让我们的cocos2dx客户端Lua拥有编解码Protocol Buffers能力. 参考: 云风pbc的用法: http:// ...
- cocos2d-x 3.1 集成 云风pbc
cocos2d-x 3.x版本号变动比較大,从改用cmake管理整个项目,到使用python集成一体化的项目工具. 这些都是我喜欢的.我能够非常easy的在我的ubuntu上面搭建好开发环境,并且根本 ...
- 二,ESP8266 GPIO和SPI和定时器和串口(基于Lua脚本语言)
https://www.cnblogs.com/yangfengwu/p/7514336.html 我们写lua用这个软件 如果点击的时候提示安装,,安装就行,,如果没有提示呢可以,按照下面链接的提示 ...
- cocos2d-x lua 中使用protobuf并对http进行处理
cocos2d-x lua 中使用protobuf并对http进行处理 本文介绍 cocos2d-x lua 中使用http 和 基于cocos2d-x 对lua http的封装(部分ok) 本博客链 ...
- (转)lua protobuffer的实现
转自: http://www.voidcn.com/article/p-vmuovdgn-bam.html (1)lua实现protobuf的简介 需要读者对google的protobuf有一定的了解 ...
- lua执行字节码的过程介绍
前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...
- lua 学习笔记(1)
一.lua函数赋值与函数调用 在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...
- 在redis中使用lua脚本让你的灵活性提高5个逼格
在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...
随机推荐
- Android让你的Toast变得炫酷
一.代码: app.gradle: dependencies{ compile 'com.sdsmdg.tastytoast:tastytoast:0.0.2'} java代码: TastyToast ...
- Cacti添加Advance Ping监控模板
Cacti脚本 1.Advance Ping 脚本及模板 注:要使用此模板,编译PHP时必须加上--enable-sockets选项来支持套接字. 1).功能:此模板用来监控一个TCP/U ...
- Ps 美白磨皮【1】
方法一:去色加图层模式法 打开需要编辑的图片,按Ctrl+J复制新的图层1. 点击菜单栏“图像”-“调整”-“去色”,如下图所示. 将图层面板的混合模式更改为“滤色”,如下图4所示. 最后的显示效 ...
- Oracle数据库之创建表空间与用户
Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...
- 【课上OJ】判断密码强度
一个判断密码强度问题: 假设允许采用以下四类字符作为密码: (1)大写英文字母,(2)小写英文字母,(3)数字0-9,(4)特殊符号 @ - _ # ~ 对密码强度做以下规定: Best: 长度> ...
- 转:perror和strerror的区别
概述: perror和strerror都是C语言提供的库函数,用于获取与erno相关的错误信息,区别不大,用法也简单.最大的区别在于perror向stderr输出结果,而 strerror向stdou ...
- 可以供MFC调用的,QT实现的DLL(使用qt-solutions的qtwinmigrate实现)
MFC和QT的消息循环机制不同,所以,要让QT写的DLL可以供MFC调用,要做一点特殊的处理 #include <qmfcapp.h> #include <qwinwidget.h& ...
- C++定义错误码类
我们平时有这样的需求,可能是C用户的老习惯了,在底层的组件中更喜欢用返回错误码的形式来告知用户函数的调用状态,一般来说,简单用#define 一个宏来包装下返回值. #define ERR_SYSTE ...
- post 相比get 有很多优点,为什么现在的HTTP通信中大多数请求还是使用get?
好吧, 除了哲学方式的回答以外,下面是一个浏览器从业人员的看法 事实上GET 和 POST 在实践上面有非常大的区别,这两种方法在语义上面并非能互相取代. POST 是否比 GET 安全 是的, PO ...
- 【转】随身HiFi 安卓OTG功能在音频上的妙用
原文网址:http://article.pchome.net/content-1745467.html 随身HiFi 安卓OTG功能在音频上的妙用 [PChome电脑之家音频频道原创]说起Androi ...