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

妖精的绣舞 提交于 2019-12-19 00:59:20

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

项目代码里使用了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++标准和标准库默认是: 在此输入图片描述

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!