osx 10.8.4上的`gem install zookeeper -v'1.4.4'`失败(与C99模式有关的错误)

时间:2013-09-12 23:40:30

标签: gem apache-zookeeper

我的系统是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) ^

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

P.S。执行gem install zookeeper可以毫无问题地安装zookeeper 1.4.6。

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

1 个答案:

答案 0 :(得分:4)

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

zookeeper似乎是建立在gcc上的。

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

他们与clang前端一起切换到LLVM。

解决这个问题的唯一方法就是通过像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不兼容性相关的各种奇怪的结果。