我的系统是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'
解决了我的问题
答案 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不兼容性相关的各种奇怪的结果。