红联Linux门户
Linux帮助

linux下用google protocol buffer(gpb)出现的编译问题

发布时间:2016-10-22 09:24:56来源:blog.csdn.net/stpeace作者:stpeace
平常没有用google protocol buffer(gpb)协议,而是用的公司的私有化序列化工具。最近刚好要用这个gpb,于是搞了一把。在工程中看了一下,之前是有对应的gpb基础库的,所以搞起来没那么麻烦,但也出现了好几个问题哈,下面一一道来。
 
首先是用protoc生成了test.pb.h和test.pb.cc文件,然后使用。
 
遇到的第一个问题是:在编译的时候提示error, 说什么版本incompatible啊,定位原因是:makefile中没有指定到对应的gpb库的头文件,导致test.pb.h中的变量没有获取到正确的值, 实际上就是如下的GOOGLE_PROTOBUF_VERSION 没有正确获取。
#if GOOGLE_PROTOBUF_VERSION < 2004000    
#error This file was generated by a newer version of protoc which is    
#error incompatible with your Protocol Buffer headers.  Please update    
#error your headers.    
#endif    
#if 2004000 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION    
#error This file was generated by an older version of protoc which is    
#error incompatible with your Protocol Buffer headers.  Please    
#error regenerate this file with a newer version of protoc.    
#endif
 
然后用正确版本的protoc把test.pb.h和test.pb.cc文件重新生成一下即可。
然后遇到的问题是,没有在makefile中指定基础的gpb库(libprotobuf.a),这个简单,直接在makefile中指定即可,搞定。
 
最后遇到的问题是,在某步,编译还是有error,提示:undefine xxx,我纳闷了好久,test.pb.h包含了,也在makefile中指定了对应的gpb基础库的头文件和库,怎么还会出问题呢?请教了一下之前有用过gpb经验的同事,发现原因是:我们的makefile没有写好,只认识.cpp文件,不认识.cc文件。好吧,把test.pb.cc文件的文件名后缀修改为.cpp即可。
 
至此,全部搞定,第一次在Linux下用gpb,还是有点折腾的,但没啥大不了的,简单。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/25268.html