在cocos2dx中应用protobuf

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

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


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

[html] view plain copy
  1. sed-i''-e's/namespace\google/namespace\google_public/g'$(find.-name\*.h-typef)
  2. sed-i''-e's/namespace\google/namespace\google_public/g'$(find.-name\*.cc-typef)
  3. sed-i''-e's/namespace\google/namespace\google_public/g'$(find.-name\*.proto-typef)
  4. sed-i''-e's/google::protobuf/google_public::protobuf/g'$(find.-name\*.h-typef)
  5. sed-i''-e's/google::protobuf/google_public::protobuf/g'$(find.-name\*.cc-typef)
  6. sed-i''-e's/google::protobuf/google_public::protobuf/g'$(find.-name\*.proto-typef)


新建一个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]
    #defineHASH_SET_H<ext/hash_set>
  1. #defineHASH_MAP_H<ext/hash_map>
  2. #defineHASH_NAMESPACE__gnu_cxx
  3. #defineHAVE_PTHREAD

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

[java]
    LOCAL_PATH:=$(callmy-dir)
  1. include$(CLEAR_VARS)
  2. LOCAL_MODULE:=protobuf
  3. LOCAL_SRC_FILES:=../../classes/protobufxx/src/google/protobuf/descriptor.cc\
  4. ../../classes/protobufxx/src/google/protobuf/descriptor.pb.cc\
  5. ../../classes/protobufxx/src/google/protobuf/descriptor_database.cc\
  6. ../../classes/protobufxx/src/google/protobuf/dynamic_message.cc\
  7. ../../classes/protobufxx/src/google/protobuf/extension_set.cc\
  8. ../../classes/protobufxx/src/google/protobuf/extension_set_heavy.cc\
  9. ../../classes/protobufxx/src/google/protobuf/generated_message_reflection.cc\
  10. ../../classes/protobufxx/src/google/protobuf/generated_message_util.cc\
  11. ../../classes/protobufxx/src/google/protobuf/message.cc\
  12. ../../classes/protobufxx/src/google/protobuf/message_lite.cc\
  13. ../../classes/protobufxx/src/google/protobuf/reflection_ops.cc\
  14. ../../classes/protobufxx/src/google/protobuf/repeated_field.cc\
  15. ../../classes/protobufxx/src/google/protobuf/service.cc\
  16. ../../classes/protobufxx/src/google/protobuf/text_format.cc\
  17. ../../classes/protobufxx/src/google/protobuf/unkNown_field_set.cc\
  18. ../../classes/protobufxx/src/google/protobuf/wire_format.cc\
  19. ../../classes/protobufxx/src/google/protobuf/wire_format_lite.cc\
  20. ../../classes/protobufxx/src/google/protobuf/io/coded_stream.cc\
  21. ../../classes/protobufxx/src/google/protobuf/io/gzip_stream.cc\
  22. ../../classes/protobufxx/src/google/protobuf/io/printer.cc\
  23. ../../classes/protobufxx/src/google/protobuf/io/tokenizer.cc\
  24. ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream.cc\
  25. ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream_impl.cc\
  26. ../../classes/protobufxx/src/google/protobuf/io/zero_copy_stream_impl_lite.cc\
  27. ../../classes/protobufxx/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc\
  28. ../../classes/protobufxx/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc\
  29. ../../classes/protobufxx/src/google/protobuf/stubs/common.cc\
  30. ../../classes/protobufxx/src/google/protobuf/stubs/once.cc\
  31. ../../classes/protobufxx/src/google/protobuf/stubs/stringprintf.cc\
  32. ../../classes/protobufxx/src/google/protobuf/stubs/structurally_valid.cc\
  33. ../../classes/protobufxx/src/google/protobuf/stubs/strutil.cc\
  34. ../../classes/protobufxx/src/google/protobuf/stubs/substitute.cc\
  35. LOCAL_C_INCLUDES:=$(LOCAL_PATH)/../../Classes
  36. LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../../Classes/protobufxx/src
  37. 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 下载

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...