Solaris 10 SPARC 64 上的 Protobuf-2.6.1 编译错误

Posted

技术标签:

【中文标题】Solaris 10 SPARC 64 上的 Protobuf-2.6.1 编译错误【英文标题】:Protobuf-2.6.1 compile error on Solaris 10 SPARC 64 【发布时间】:2015-12-02 07:43:26 【问题描述】:

尝试在 Solaris 10 SPARC 64 上编译 Protobuf-2.6.1 时,我得到:

./google/protobuf/stubs/once.h: In function `void google::protobuf::GoogleOnceInit(google::protobuf::ProtobufOnceType*, void (*)())':
./google/protobuf/stubs/once.h:125: error: cannot convert `google::protobuf::ProtobufOnceType*' to `const volatile google::protobuf::internal::Atomic32*' for argument `1' to `google::protobuf::internal::Atomic32 google::protobuf::internal::Acquire_Load(const volatile google::protobuf::internal::Atomic32*)'
./google/protobuf/stubs/once.h: In function `void google::protobuf::GoogleOnceInit(google::protobuf::ProtobufOnceType*, void (*)(Arg*), Arg*)':
./google/protobuf/stubs/once.h:134: error: cannot convert `google::protobuf::ProtobufOnceType*' to `const volatile google::protobuf::internal::Atomic32*' for argument `1' to `google::protobuf::internal::Atomic32 google::protobuf::internal::Acquire_Load(const volatile google::protobuf::internal::Atomic32*)'

我遵循了官方 README,./configuremake

编译器版本(GCC):

$ gcc -v
Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs
Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/ccs/bin/as --without-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++ --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath) 

我也阅读了protobuf generated files does not compile on Solaris SPARC 64 的问题并尝试过,但没有成功。那篇文章适用于 Protobuf-2.4.1,但 Protobuf-2.6.1 发生了变化:

2014-10-20 version 2.6.1:

  C++
  * Added atomicops support for Solaris.

有什么办法可以让 GCC 做强制指针转换?

【问题讨论】:

【参考方案1】:

我根据github问题#789解决了问题

主要原因在本期第四点提到。预定义的 SOLARIS_64BIT_ENABLED 宏根本不起作用。

只需在 CXXFLAGS 和 CFLAGS 中添加-m64 -DSOLARIS_64BIT_ENABLED 即可解决问题。但最好按照问题的建议进行整体修改。

【讨论】:

以上是关于Solaris 10 SPARC 64 上的 Protobuf-2.6.1 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

boost1.44.0 文件系统 v3 无法在 solaris sparc 64bit 平台上正常运行

Solaris 10 中的 libv8 安装(SPARC 架构,gcc 4.6.3)

求solaris sparc补丁144501-19,或最新版本的 sol-10-u11-ga-sparc-dvd.iso在simics虚拟机上的安装方法。

在 Linux 上构建 Solaris 软件包?

在 Solaris Sparc 下的 ./configure 中强制使用 gcc 编译(而不是 cc)

配置mysql为主主复制步骤