`
aigo
  • 浏览: 2635266 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

vc++和android ndk开发中使用protobuf和lua

阅读更多

原文:http://ziplee.iteye.com/blog/2078851 

 

下载地址: 
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  


一般protoc就会安装到/usr/local/bin下 

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

Shell代码  收藏代码
  1. cd python  
  2. python setup.py build  
  3. python setup.py install  



protoc-gen-lua: 
解压后到目录 

Shell代码  收藏代码
  1. cd protobuf  
  2. 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  



这样就能使用命令 

Shell代码  收藏代码
  1. protoc --lua_out=./ foo.proto  


生成lua的protobuf支持文件了 

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

Shell代码  收藏代码
  1. protoc --lua_out=./ person.proto  


这时候查看目录应该生成了一个person_pb.lua文件, 

运行下测试代码 

Shell代码  收藏代码
  1. 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 <endian.h>  


改成 

C代码  收藏代码
  1. #ifndef WIN32  
  2. #include <endian.h>  
  3. #else  
  4. #pragma comment(lib,"lua5.1.lib")  
  5. #endif  



C代码  收藏代码
  1. static int struct_unpack(lua_State *L){  


函数下的 

C代码  收藏代码
  1. buffer += pos;  
  2.   
  3. uint8_t out[8];  


要改成 

C代码  收藏代码
  1. uint8_t out[8];  
  2.   
  3. buffer += pos;  



函数 

C代码  收藏代码
  1. int luaopen_pb(lua_State *L)  


改成 

C代码  收藏代码
  1. __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目录 
建立一个脚本文件,

1. build.bat 

Bat代码  收藏代码
  1. @python "%~dp0protoc-gen-lua"  


在你的protobuf协议模板文件下建一个bat文件,假设这个文件下有两个子目录一个是logicmsg,里面全是proto模板文件,再一个就是protoc-gen-lua文件夹,还有一个protoc.exe的可执行文件:

make_proto.bat

protoc logicmsg/*.proto --plugin=protoc-gen-lua="protoc-gen-lua\plugin\protoc-gen-lua.bat" --lua_out=.

 

OK, 以后就只要将这个make_proto.bat放到proto所在的目录运行下就能得到.lua的文件了。注意参数--lua_out=.不能改,只能是.而不是是其他的具体路径,否则无法生成,具体原因不清楚


可以用example下的例子做测试 


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

分享到:
评论

相关推荐

    androidndk开发实战

    NDK(Native Development Kit)是Google为Android提供的一个工具集,它允许开发者使用C和C++编写性能关键部分的代码,以实现更高效能和更低级别的硬件访问。 首先,资源中的“Android NDK 开发环境搭建.doc”提供了...

    非常强大的eclipse中android ndk开发环境的配置说明

    本文档将详细介绍如何在Eclipse中配置Android NDK开发环境,并实现C/C++代码的自动编译以及通过Eclipse使用Ant生成JNI所需的头文件。配置流程包括Linux和Windows两种环境下的步骤。 #### 二、配置前提 确保以下工具...

    Android NDK 开发教程二

    为了满足不同层次的开发需求,Google 提供了多种工具和技术栈,其中 Android NDK (Native Development Kit) 就是其中之一。它允许开发者使用 C 或 C++ 编写部分应用逻辑,从而利用更底层的语言来优化性能。本文将...

    android ndk开发实例代码

    Android NDK是一个重要的工具集,它允许开发者在Android应用中使用原生代码,如C++和Fortran,来实现性能敏感或需要底层硬件交互的部分。这个"android ndk开发实例代码"提供了一个入门级的示例,帮助开发者理解NDK和...

    Android NDK 开发的官方文档(android ndk dev guide)

    Android NDK(Native Development Kit)是Google提供的一款工具集,允许开发者在Android应用中使用C和C++代码,从而利用原生编程语言的高性能和低级硬件控制能力。NDK的主要用途包括处理计算密集型任务、重用已有的C...

    Android NDK 开发教程三

    在移动应用开发领域,Android NDK (Native Development Kit) 提供了一种使用 C 或 C++ 编写原生代码的方式,这对于提高应用程序性能至关重要。本文将详细介绍 Android NDK 的 Hello JNI 示例项目,通过这个例子我们...

    android ndk lua5.1.5 (加入了lua_cjson)

    6. **在Java代码中调用**:最后,在Java代码中,你可以使用`System.loadLibrary("lua")`和`System.loadLibrary("lua_cjson")`来加载这两个库,并通过JNI接口调用Lua和lua_cjson的功能。 通过以上步骤,你就成功地在...

    ECLIPSE下的androidndk开发

    集成Android NDK到Eclipse是因为Eclipse是一款广泛使用的IDE,提供了丰富的开发工具和调试功能。通过集成NDK,开发者可以在同一个环境中进行Java和C/C++代码的编写,便于项目管理,提高开发效率。 **3. 怎样操作?*...

    Android NDK开发轻松入门.pdf

    - **应用场景**:虽然大部分 Android 应用主要基于 Java 或 Kotlin 开发,但在特定场景下使用 NDK 进行开发可以显著提升应用性能。例如,游戏引擎、音视频处理等需要高性能计算的场景。 #### 二、Android NDK 组件...

    android-ndk-r20b-windows-x86_64.zip

    在移动开发领域,Android NDK(Native Development Kit)扮演着不可或缺的角色,它为开发者提供了在Android平台上使用C和C++编写原生代码的能力。本文将深入探讨Android NDK R20B版本,特别是其在64位Windows环境下...

    《Android NDK 开发教程 - v1.0》PDF

    NDK(Native Development Kit)是Google提供的一种工具集,允许开发者使用C和C++等原生代码来开发部分或全部Android应用,从而提升性能、优化图形处理以及使用硬件加速等功能。此教程旨在帮助开发者了解和掌握NDK的...

    Android_NDK_android端_图片处理_android_NDK_ndk开发_

    Android NDK是一套工具,允许开发者在Android应用中使用C和C++代码。它提供了头文件和库,使得在原生环境中调用Android API成为可能。使用NDK的优点包括性能提升、减少内存消耗和利用已有的C/C++库。 2. **JNI...

    android ndk开发步骤和实例

    Android NDK(Native Development Kit)是Google为Android平台提供的一套工具集,它允许开发者使用C、C++等原生代码来编写部分应用程序,从而利用这些低级语言的高性能和灵活性。JNI(Java Native Interface)是Java...

    android ndk-stack使用说明。

    通过以上步骤,我们可以有效地利用`ndk-stack`工具来解决在Cocos2d-x、JNI以及Android NDK开发过程中遇到的调试难题。尤其是在处理C/C++代码时,能够更加直观地看到函数调用的流程,这对于定位bug具有极大的帮助。...

    Android NDK开发PPT

    Android NDK(Android Native Development Kit)是Android应用开发中的一个重要工具集,它允许开发者在Android应用程序中集成C/C++编写的原生代码,以提高性能和利用已有的C/C++库。NDK的优势在于,对于那些对计算...

    android-ndk(android-ndk-r23b-windows.zip)

    NDK是Android应用开发中的一个重要组成部分,它允许开发者使用原生代码(如C、C++)来编写部分应用程序,从而利用底层的硬件性能,提高程序运行效率,尤其是在处理图形计算、物理模拟和游戏引擎等高性能需求的场景下...

    Android NDK开发示例

    Android NDK(Native Development Kit)是Google为Android平台提供的一款工具集,允许开发者在Android应用中使用C++和其它本地语言编写代码。这篇教程将深入探讨Android NDK开发,为初学者提供一个全面的入门指南。 ...

    Android NDK开发流程

    ### Android NDK开发流程 #### 一、简介 在移动应用开发领域,Android平台因其开放性和灵活性而备受开发者青睐。为了充分利用硬件性能并实现高性能计算,Android提供了NDK(Native Development Kit)工具集,允许...

    android-ndk(android-ndk-r25b-linux.zip)

    在Android应用开发中,NDK扮演着至关重要的角色,它允许开发者使用原生代码(如C和C++)来编写部分应用,以提高性能、利用硬件加速功能或复用现有的C/C++库。 1. **JNI(Java Native Interface)**: JNI是Java...

    android-ndk(android-ndk-r25b-windows.zip)

    NDK的主要功能是让开发者能够在Android应用中使用原生代码,例如C、C++,以实现高性能计算或利用硬件加速等功能。 **JNI(Java Native Interface)**是Android NDK的核心组成部分,它提供了Java和本地代码之间的...

Global site tag (gtag.js) - Google Analytics