Protobuf移植到AIX平台

Protobuf移植到AIX平台

ID:40564732

大小:48.68 KB

页数:10页

时间:2019-08-04

Protobuf移植到AIX平台_第1页
Protobuf移植到AIX平台_第2页
Protobuf移植到AIX平台_第3页
Protobuf移植到AIX平台_第4页
Protobuf移植到AIX平台_第5页
资源描述:

《Protobuf移植到AIX平台》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、protobuf移植到AIX平台1.前言想学习使用googgle公司的开源工具protobuf,看以后在项目中是否可以使用。要求是protubuf的C++版本,而且需要运行在IBMAIX平台上,编译器是xlC。等从网上下来protobuf版本,按照网上的指导进行操作,发现不能成功,仔细检查发现了两个问题:²Protobuf2.5.0不支持AIX下的xlC编译器,好像支持的平台编译器包括:gCC编译器、苹果的编译器、solaris编译器等等,但是不包括aix的xlC编译器。²这个项目中的个别头文件中也存在bug,它的错误定义是按照gcc的格式定义的,如果平台不是g

2、cc平台,就会报错,但是报的不是“不支持平台”,而是“程序语法错误”。不多说。注:这个小文章是说明如何把protobuf2.5.0C++版本,移植到IBM小型机的AIX操作系统,操作系统上安装的xlC编译器是10.1版本。请务必注意以上条件。以后文章中提到的protobuf,就是指protobuf2.5.0。您的AIX上应该已经安装了xlC编译器。1.操作过程1.1.下载protobuf这个过程,不必要详述了吧。如果找不到protobuf,我也没有办法帮助你了。1.2.Protobuf装载这个过程是把下载的protobuf包,安装到IBMAIX系统中。通常用使用

3、tar。这个过程应该也不需要详述了吧。如果真的需要帮助,请上网搜索,或是请教同事。1.3.编译前准备假设您的protobuf解压到了/home/my/目录下。您需要设计一下,您的protobuf软件编译完成后,需要安装到哪个目录下,这一点非常重要。假设您准备把您的protobuf站将来安装到/home/your/目录下。请您在/home/my/protobuf-2.5.0/目录下,运行如下命令:make--prefix=/home/your该命令应该会无错误运行结束。1.4.编译假设您已经完成上述几项工作,您需要在/home/my/protobuf-2.5.0/

4、目录下,运行如下命令:make报错可能是:/home/my/protobuf-2.5.0/src/google/protobuf/stubs/atomicops.h文件中190行有错误。检查一下,你会发现,其实是该文件160行,有如下命令:#defineGOOGLE_PROTOBUF_ATOMICOPS_ERROR#error"Atomicoperationsarenotsupportedonyourplatform"这个语法,显然不是xlC编译器所支持的语法,再检查您会发现,主要原因是protobuf不支持aix平台。1.1.问题解决为了解决这个问题,需要新

5、增一个头文件,修改几个头文件,修改一个CC文件,修改一个Makefile文件,修改一个libtool文件。1.1.1.新增一个头文件新增头文件:protobuf-2.5.0/src/google/protobuf/stubs/atomicops_internals_ppc_gcc.h该文件的核心代码如下:#ifndefGOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PPC_GCC_H_#defineGOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PPC_GCC_H_#defineATOMICOPS_COMPILER

6、_BARRIER()__asm____volatile__("":::"memory")#includetypedefint64Atomic64;namespacegoogle{namespaceprotobuf{namespaceinternal{//Atomicallyexecute://result=*ptr;//if(*ptr==old_value)//*ptr=new_value;//returnresult;////I.e.,replace"*ptr"with"new_value"if"*ptr"usedtobe"o

7、ld_value".//Alwaysreturntheoldvalueof"*ptr"////Thisroutineimpliesnomemorybarriers.inlineAtomic64NoBarrier_CompareAndSwap(volatileAtomic64*ptr,Atomic64old_value,Atomic64new_value){Atomic64prev;__asm____volatile__("1:lwarx%0,0,%2cmpw0,%0,%3bne-2fstwcx.%4,0,%2bne-1b""2:":

8、"=&r"(prev),

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。