在cocos2dx中应用protobuf

12 篇文章 0 订阅
5 篇文章 0 订阅

protobuf在各个平台下编译好痛苦!!!  各种失败!! 经过两天的努力终于成功了!!!所以有必要记录下,以方便会他人会用到(网上查阅了很多资料, 很是感激那些作者)

去https://code.google.com/p/protobuf/downloads/list下载版本protobuf-2.5.0.tar.bz2, 然后解压 如图


为了解决ios平台下可能的名字空间冲突,  切换到src/google/protobuf下,运行下面的命令

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sed -i '' -e 's/namespace\ google /namespace\ google_public /g' $(find . -name \*.h -type f)  
  2. sed -i '' -e 's/namespace\ google /namespace\ google_public /g' $(find . -name \*.cc -type f)  
  3. sed -i '' -e 's/namespace\ google /namespace\ google_public /g' $(find . -name \*.proto -type f)  
  4. sed -i '' -e 's/google::protobuf/google_public::protobuf/g' $(find . -name \*.h -type f)  
  5. sed -i '' -e 's/google::protobuf/google_public::protobuf/g' $(find . -name \*.cc -type f)  
  6. sed -i '' -e 's/google::protobuf/google_public::protobuf/g' $(find . -name \*.proto -type f)  


新建一个cocos2dx工程以后测试用。

在cocos2dx工程的Classes目录中新建目录pb, protobuf_base。 pb用来放proto转换后的.cc和.h文件; protobuf_base目录下放置protobuf必须的头文件及各平台下的库文件。按如下截图建立各个目录



下面一步步来编译各个环境

1. Windows下 直接打开vsprojects下的protobuf工程文件, 有些vs版本可能会提示对项目方案的一些更改,点击确定。

    然后右键protobuf, 生成, 之间可能会有些错误, 不用管,是一些google的测试文件,无视之!

在debug目录下会生成4个重要的文件protoc.exe,libprotobuf.lib, libprotobuf-lite.lib,libprotoc.lib

其中protoc.exe是用来生成.h和.cc文件的。  将这4个文件拷贝到Classes/protobuf_base/lib/win32下。

2.Android下的编译

   将下载好的protobuf源码拷贝一份到cocos2dx工程的Classes目录中, 重新命名为protobufxx(临时编译Android用, 编译好后将会删除)

   在src目录中新建头文件config.h, 内容如下:

   

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #define HASH_SET_H <ext/hash_set>  
  2. #define HASH_MAP_H <ext/hash_map>  
  3. #define HASH_NAMESPACE __gnu_cxx  
  4.   
  5.    
  6. #define HAVE_PTHREAD  

   打开刚才新建的cocos2dx工程下中Android项目下的编译文件Android.mk, 修改为如下

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. LOCAL_PATH := $(call my-dir)  
  2.    
  3. include $(CLEAR_VARS)  
  4.    
  5. LOCAL_MODULE := protobuf  
  6.   
  7. LOCAL_SRC_FILES := ../../classes/protobufxx/src/google/protobuf/descriptor.cc \  
  8.                    ../../classes/protobufxx/src/google/protobuf/descriptor.pb.cc \  
  9.                    ../../classes/protobufxx/src/google/protobuf/descriptor_database.cc \  
  10.                    ../../classes/protobufxx/src/google/protobuf/dynamic_message.cc \  
  11.                    ../../classes/protobufxx/src/google/protobuf/extension_set.cc \  
  12.                    ../../classes/protobufxx/src/google/protobuf/extension_set_heavy.cc \  
  13.                    ../../classes/protobufxx/src/google/protobuf/generated_message_reflection.cc \  
  14.                    ../../classes/protobufxx/src/google/protobuf/generated_message_util.cc \  
  15.                    ../../classes/protobufxx/src/google/protobuf/message.cc \  
  16.                    ../../classes/protobufxx/src/google/protobuf/message_lite.cc \  
  17.                    ../../classes/protobufxx/src/google/protobuf/reflection_ops.cc \  
  18.                    ../../classes/protobufxx/src/google/protobuf/repeated_field.cc \  
  19.                    ../../classes/protobufxx/src/google/protobuf/service.cc \  
  20.                    ../../classes/protobufxx/src/google/protobuf/text_format.cc \  
  21.                    ../../classes/protobufxx/src/google/protobuf/unknown_field_set.cc \  
  22.                    ../../classes/protobufxx/src/google/protobuf/wire_format.cc \  
  23.                    ../../classes/protobufxx/src/google/protobuf/wire_format_lite.cc \  
  24.                    ../../classes/protobufxx/src/google/protobuf/io/coded_stream.cc \  
  25.                    ../../classes/protobufxx/src/google/protobuf/io/gzip_stream.cc \  
  26.                    ../../classes/protobufxx/src/google/protobuf/io/printer.cc \  
  27.                    ../../classes/protobufxx/src/google/protobuf/io/tokenizer.cc \  
  28.                    ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream.cc \  
  29.                    ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream_impl.cc \  
  30.                    ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream_impl_lite.cc \  
  31.                    ../../classes/protobufxx/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc \  
  32.                    ../../classes/protobufxx/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc \  
  33.                    ../../classes/protobufxx/src/google/protobuf/stubs/common.cc \  
  34.                    ../../classes/protobufxx/src/google/protobuf/stubs/once.cc \  
  35.                    ../../classes/protobufxx/src/google/protobuf/stubs/stringprintf.cc \  
  36.                    ../../classes/protobufxx/src/google/protobuf/stubs/structurally_valid.cc \  
  37.                    ../../classes/protobufxx/src/google/protobuf/stubs/strutil.cc \  
  38.                    ../../classes/protobufxx/src/google/protobuf/stubs/substitute.cc \           
  39.   
  40. LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes  
  41. LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/protobufxx/src  
  42.                      
  43.    
  44. include $(BUILD_STATIC_LIBRARY)  
编译后去obj目录下把libprotobuf.a拷贝到Classes/protobuf_base/lib/android下

 3.IOS下的编译

参考https://gist.github.com/strahlex/10585771

将生成的libprotobuf.a,libprotobuf-lite.a 拷贝到Classes/protobuf_base/lib/ios下



可以去http://download.csdn.net/detail/jijun7885417/7403681  下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值