Protobuf移植到AIX平台.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Protobuf移植到AIX平台

protobuf移植到AIX平台前言想学习使用googgle公司的开源工具protobuf,看以后在项目中是否可以使用。要求是protubuf的C++版本,而且需要运行在IBM AIX平台上,编译器是xlC。等从网上下来protobuf版本,按照网上的指导进行操作,发现不能成功,仔细检查发现了两个问题:Protobuf2.5.0不支持AIX下的xlC编译器,好像支持的平台编译器包括:gCC编译器、苹果的编译器、solaris编译器等等,但是不包括aix的xlC编译器。这个项目中的个别头文件中也存在bug,它的错误定义是按照gcc的格式定义的,如果平台不是gcc平台,就会报错,但是报的不是“不支持平台”,而是“程序语法错误”。不多说。注:这个小文章是说明如何把protobuf2.5.0 C++版本,移植到IBM小型机的AIX操作系统,操作系统上安装的xlC编译器是10.1版本。请务必注意以上条件。以后文章中提到的protobuf,就是指protobuf2.5.0。您的AIX上应该已经安装了xlC编译器。操作过程下载protobuf这个过程,不必要详述了吧。如果找不到protobuf,我也没有办法帮助你了。Protobuf装载这个过程是把下载的protobuf包,安装到IBM AIX系统中。通常用使用tar。这个过程应该也不需要详述了吧。如果真的需要帮助,请上网有哪些信誉好的足球投注网站,或是请教同事。编译前准备假设您的protobuf解压到了/home/my/目录下。您需要设计一下,您的protobuf软件编译完成后,需要安装到哪个目录下,这一点非常重要。假设您准备把您的protobuf站将来安装到/home/your/目录下。请您在/home/my/protobuf-2.5.0/目录下,运行如下命令:make --prefix=/home/your该命令应该会无错误运行结束。编译假设您已经完成上述几项工作,您需要在/home/my/protobuf-2.5.0/目录下,运行如下命令:make报错可能是:/home/my/protobuf-2.5.0/src/google/protobuf/stubs/atomicops.h 文件中190行有错误。检查一下,你会发现,其实是该文件160行,有如下命令:#define GOOGLE_PROTOBUF_ATOMICOPS_ERROR \#error Atomic operations are not supported on your platform这个语法,显然不是xlC编译器所支持的语法,再检查您会发现,主要原因是protobuf不支持aix平台。问题解决为了解决这个问题,需要新增一个头文件,修改几个头文件,修改一个CC文件,修改一个Makefile文件,修改一个libtool文件。新增一个头文件新增头文件:protobuf-2.5.0/src/google/protobuf/stubs/atomicops_internals_ppc_gcc.h该文件的核心代码如下:#ifndef GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PPC_GCC_H_#define GOOGLE_PROTOBUF_ATOMICOPS_INTERNALS_PPC_GCC_H_#define ATOMICOPS_COMPILER_BARRIER() __asm__ __volatile__( : : : memory)#include sys/atomic_op.htypedef int64 Atomic64;namespace google {namespace protobuf {namespace internal {// Atomically execute:// result = *ptr;// if (*ptr == old_value)// *ptr = new_value;// return result;//// I.e., replace *ptr with new_value if *ptr used to be old_value.// Always return the old value of *ptr//// This routine implies no memory barriers.inline Atomic64 NoBarrier_CompareAndSwap(volatile Atomic64* ptr, Atomic64 old_value, Atomic64 new_value) {Atomic64 prev;__asm__ __volatile__ (1:lwarx%0,0,%2\n\cmpw0,%0,%3

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档