下载地址:

protobuf:https://code.google.com/p/protobuf/downloads/list下载最新的protobuf 我这里下载的是2.5.0
protoc-gen-lua:https://github.com/sean-lin/protoc-gen-lua下载master分支

Linux下安装:
protobuf:
解压后到目录
Shell代码

  1. ./configure && make && sudo make install

./configure && make && sudo make install
一般protoc就会安装到/usr/local/bin下

安装python支持(Linux下可选,装也没啥问题)
Shell代码

  1. cd python
  2. python setup.py build
  3. python setup.py install

cd python
python setup.py build
python setup.py install

protoc-gen-lua:
解压后到目录
Shell代码

  1. cd protobuf
  2. make

cd protobuf
make
这里可能会报个lua5.1的error, 生成pb.so就OK, 无视ERROR了, 使用时请将pb.so加入package.cpath中, 也可以放在安装后lua的lib下,我的是在/usr/local/lib/lua/5.1/
那直接将pb.so放到该目录, 以后项目也不用特别新加一句package.cpath=…了
Shell代码

  1. cd /usr/local/bin && sudo ln -s /YOURPATH/protoc-gen-lua/plugin/protoc-gen-lua

cd /usr/local/bin && sudo ln -s /YOURPATH/protoc-gen-lua/plugin/protoc-gen-lua

这样就能使用命令
Shell代码

  1. protoc —lua_out=./ foo.proto

protoc —lua_out=./ foo.proto
生成lua的protobuf支持文件了

到protoc-gen-lua的example目录可以试试
Shell代码

  1. protoc —lua_out=./ person.proto

protoc —lua_out=./ person.proto
这时候查看目录应该生成了一个person_pb.lua文件,

运行下测试代码
Shell代码

  1. lua test.lua

lua test.lua
查看输出

Windows下:
protobuf:
解压后到目录
到目录vsprojects下打开protobuf.sln项目,编译,会在vsprojects/Debug或者vsprojects/Release生成protoc.exe执行文件, 放到某个目录加入到PATH环境变量中…

到protobuf目录下的python目录,和linux下一样安装, 请确认你的电脑安装了python,并将python执行文件所在目录加入到了PATH;python建议安装2.X最新系列
windows下安装protobuf的python支持是必须的

tips:不选中任何文件的情况下,在目录的空白位置shift+右键会出现”在此处打开命令行窗口”,然后你懂的

重点是protoc-gen-lua了:
github下面下载出来的文件格式是linux下的utf-8, 可能得转成PC下的GB…主要针对protoc-gen-lua\protobuf\pb.c

windows下将pb.c几个位置改一下
C代码

  1. include

include
改成
C代码

  1. ifndef WIN32

  2. include

  3. else

  4. pragma comment(lib,”lua5.1.lib”)

  5. endif

ifndef WIN32
#include
#else
#pragma comment(lib,”lua5.1.lib”)
#endif
C代码

  1. staticint struct_unpack(lua_State *L){

static int struct_unpack(lua_State *L){
函数下的
C代码

  1. buffer += pos;
  2. uint8_t out[8];

buffer += pos;

uint8_t out[8];
要改成
C代码

  1. uint8_t out[8];
  2. buffer += pos;

uint8_t out[8];

buffer += pos;

函数
C代码

  1. int luaopen_pb(lua_State *L)

int luaopen_pb(lua_State *L)
改成
C代码

  1. __declspec(dllexport) int luaopen_pb(lua_State *L)

__declspec(dllexport) int luaopen_pb(lua_State *L)

OK,改造完毕, VS新建项目->win32项目->下一步->应用程序类型:点选dll, 附加符号:先”导出符号”, 后”空项目”->完成

将pb.c加入到项目中, 生成解决方案

到目录下会发现生成了YOURNAME.dll
将之重命名为pb.dll
如果要做到项目中都可以使用的话可以放到lua安装目录的clib下,不然自己加到package.cpath中

到protoc-gen-lua的plugin目录
建立两个脚本文件, 注意改成你自己的目录, Win下做开发就少放在含有中文的目录下了

  1. build.bat
    Bat代码

  2. @python E:/protobuf/protoc-gen-lua/plugin/protoc-gen-lua

@python E:/protobuf/protoc-gen-lua/plugin/protoc-gen-lua

2.make_proto.bat
Bat代码

  1. for %%i in (*.proto) do (
  2. protoc —lua_out=./ —plugin=protoc-gen-lua=”E:/protobuf/protoc-gen-lua/plugin/build.bat” %%i
  3. )

for %%i in (*.proto) do (
protoc —lua_out=./ —plugin=protoc-gen-lua=”E:/protobuf/protoc-gen-lua/plugin/build.bat” %%i
)

OK, 以后就只要将这个make_proto.bat放到proto所在的目录运行下就能得到.lua的文件了

可以用example下的例子做测试

PS:关于pb.so pb.dll名称主要是protoc-gen-lua里面有个protobuf.lua的函数有个require “pb”

转载请标明出处:http://ziplee.iteye.com/blog/2078851

@HAPPY CODINE@