压根没有写博文的习惯,但是这次项目因为protobuf耽误了很多时间,而且baidu和Google上我也找了很多方法,走了很多弯路,但终究还是弄好了,为了庆祝下,就分享下配置过程吧。
1.我的配置环境:
系统:macOS Mojave10.14.16;
Xcode:v10.3;
protobuf:v2.5.0;
cocos2dx:v3.17.2。
2.下载protobuf:
下载地址:https://github.com/protocolbuffers/protobuf/releases
有博文介绍cocos2dx接入protobuf要到cocos2d-x\tools\simulator\libsimulator\lib\protobuf-lite路径下看config.h文件里看protobuf的版本,其实没必要,直接区上面地址下载一个你喜欢的版本就行了,zip和tar.gz无所谓。
3.protobuf安装:
解压下载的protobuf压缩包,打开终端cd到解压后的目录,在该目录下依次执行(如果权限不够就在命令前加sudo):
(1)./configure
(2)make
(3)make check(可跳过)
(4)make install
安装完成后在输入 protoc --version,如下图出现proto版本号即为安装成功
4.将proto文件生成pb.h和pb.cc文件
比如我的proto文件为test.proto,为了省事,我是直接将test.proto文件复制到/usr/local/bin,然后终端cd到该路径下,执行./protoc -I=./ --cpp_out=./ ./test.proto,如下图就会在该路径下生成另外两个文件
4.生成可供xcode使用的静态库
网上能查到的总结一下就三种方法(第三种成功):
第一种就是直接用安装protobuf自动生成的静态库,头文件在/usr/local/include,静态库文件在/usr/local/lib
我试过,这些都是x86_64,可以用,在xcode上跑模拟器没问题,但是不能跑在ios真机上,因为真机是arm64、arm7v、arm7vs,所以我们要自己生成支持真机的库。
网上的第二种方法就是用脚本自动生成,我试了都只能生成x86_64
第三种方法就是自己将protobuf源码通过xcode打包成静态库:
(1)在protobuf解压目录下创建一个文件夹,为了方便讲解,我把文件夹命名为XcodeProject,如图
(2)xcode新建项目,选择Cocoa Touch Static Library
next
自己随便命名,包名也随意,语言选OC,然后点next设置项目路径,选择刚创建的XcodeProject目录
(3)创建完成后
(4)将protobuf解压路径下src里的google拖进xcode
(5)再将解压路径下的config.h拖进xcode,跟上一步一样,不要复制,勾选添加
(6)将google/protobuf/compiler和google/protobuf/testdata文件夹从工程中移除,记住是移除出当前项目,不是删除
(7)在如下所示的地方输入test,将搜索出来带test的文件全部移除,记住是移除
(8)添加头文件引用
(9)打开stubs/platform_macros.h,添加:
#elif defined(__aarch64__)
#define GOOGLE_PROTOBUF_ARCH_ARM 1
#define GOOGLE_PROTOBUF_ARCH_64_BIT 1
(10)修改google命名空间
protobuf的命名空间可能会与apple的命名空间冲突,所以修改一下
打开google/protobuf/stubs/common.h
在如下位置添加
#define google google_private
(11)添加头文件
如下图,点击+号将项目中所有的头文件添加进来
(12)设置run为release
(13)build
这里选择iOS Device build出的静态库就可供真机使用,选择模拟器build出的库可供模拟器使用
这里提一点,新的xcode在这里build会报错,只需打开File-》Project Settings将build syatem改为Legacy Build System就行了
5.将protobuf集成到cocos2dx项目中
(1)build success之后会在Products下看到一个.a文件,这个就是我们所需要的静态库,右键Show in Finder
(2)为了集成方便,我在cocos2dx项目下创建了一个ProtoBuf文件夹
include文件夹我没用生成静态库生成的,而是直接复制的/usr/local/include文件夹,复制过来后并将里面的compile文件夹删除。
将上一步生成的静态库.a文件复制到ProtoBuf/lib文件夹下。
(3)用xcode打开cocos2dx项目
(4)将pb文件添加进Classes
(5)添加静态库
为了测试方便,我添加了两个,一个是模拟器用的,一个是真机用的
(6)设置头文件搜索路径和静态库路径
(7)集成完成,测试
引入头文件,使用protobuf。
以上就是我为cocos2dx c++在mac下配置protobuf的步骤,如有不对,欢迎指正