3

我的系统是 osx 10.8.4,gem install zookeeper -v '1.4.4'总是出现以下错误:

src/hashtable/hashtable_itr.c:42:1: error: redefinition of a 'extern inline' function 'hashtable_iterator_key' is not supported in C99 mode hashtable_iterator_key(struct hashtable_itr *i) ^ src/hashtable/hashtable_itr.h:36:1: note: previous definition is here hashtable_iterator_key(struct hashtable_itr *i) ^ src/hashtable/hashtable_itr.c:46:1: error: redefinition of a 'extern inline' function 'hashtable_iterator_value' is not supported in C99 mode hashtable_iterator_value(struct hashtable_itr *i) ^ src/hashtable/hashtable_itr.h:45:1: note: previous definition is here hashtable_iterator_value(struct hashtable_itr *i) ^

有没有人碰巧知道原因?谢谢!

PS 这样做gem install zookeeper可以毫无问题地安装 zookeeper 1.4.6。

更新:做CC=gcc-4.6 gem install zookeeper -v '1.4.4'解决了我的问题

4

1 回答 1

4

只是为了使这个问题成为一个已回答的问题,我想提供一个“正确”的答案。

zookeeper 似乎是在 gcc 上构建的。

OS X 或更好的说法是 Xcode(从 4.x 版开始)停止使用 gcc 作为默认值,直到他们最终完全放弃 gcc 支持。

他们切换到 LLVM 和 clang 前端。

在不修改源代码的情况下解决该问题的唯一方法是通过 homebrew 之类的工具安装 gcc - 例如;

brew install gcc47

完成后,您可以通过提供匹配的 CC(和/或 CXX)环境变量来指示您的构建/安装过程使用该 gcc;

CC=gcc-4.7 CXX=g++-4.7

您的问题的更新有效,因为您之前安装了 gcc4.6。对于最近安装的 OS X / Xcode 可能不是这种情况,因此我的回答很冗长。

这些步骤应该是相当通用的,并且可以在“标准”包没有在 OS X / Xcode 上正确构建或安装时使用;只需在您的安装/配置指令前面加上给定的环境变量。

至于你的例子,那就是:

CC=gcc-4.7 CXX=g++-4.7 gem install zookeeper -v '1.4.4'

笔记; 很可能有侵入性较小的方法来完成工作,但如果没有进一步的尝试和错误,上述方法通常可以解决与 clang / gcc 不兼容相关的各种奇怪结果。

于 2013-11-12T21:54:10.853 回答