protobuf2.5在iOS上编译及cocos2dx混合使用的问题

项目代码里使用了protobuf作为协议层的的编码解码库, 所以需要编译成arm系列架构的静态库供游戏使用. 在编译过程中十分坎坷,首先,protobuf的源码在编译时如果直接使用configure生成的makefile编译会有error,后来在网上找到了https://gist.github.com/BennettSmith/7150245这个build脚本,终于build出来了一个可以用的静态lib(需要注意的是在build过程中会访问google code和Github去下载源码包和补丁,而这两个网站又因为gfw的问题时好时坏,所以如果build过程中遇到问题,请先确认是否是gfw导致的问题)。

后来在cocos2dx工程中引用该lib的时候发现编译没有问题 但是链接的时候就会报各种莫名其妙的链接失败,找不到符号表的错误。追查了很久发现cocos2dx的project_creator生成的工程的llvm编译器属性设置里使用c++标准和标准库默认是: protobuf2.5在iOS上编译及cocos2dx混合使用的问题_第1张图片

但是protbuf里因为代码里使用一些c++11新增特性的功能,所以编译时就使用了如下配置: protobuf2.5在iOS上编译及cocos2dx混合使用的问题_第2张图片 因此两个库使用的针对c++语言的编译器属性设置不同导致出现了如上的链接问题,解决办法也很简单,就是把所有以源码方式引入的第三方库(包括cocos2dx)的编译器的配置都改为如上的c++11和libc++就ok了。

另外,网上也有人采用直接在工程中引入protobuf源码的方式来解决这个问题,我经过测试也是可行的,没有采用这种方式的原因在于这种方式如果要build一个protobuf-lite需要分析它的makefile来确认要生成protobuf-lite到底只需要那些文件,而由于我们自己项目时间有限,所以我就没有过多的尝试,只是确认了这种方式也是一种可行的方案,具体操作步骤不再赘述,附链接地址: http://stackoverflow.com/questions/10277576/google-protocol-buffers-on-ios

转载于:https://my.oschina.net/pigsoldier/blog/203977

你可能感兴趣的:(c/c++)