OSX 10.8.4 上的"gem 安装 zookeepeR语言 v '1.4.4'"失败(错误与 C99 模式相关)



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

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

附言做gem install zookeeper可以毫无问题地安装动物园管理员 1.4.6。

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

只是为了让这个问题得到回答,我想提供一个"正确"的答案。

Zookeeper似乎打算建立在GCC之上。

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

他们切换到LLVM与clang前端相结合。

在不摆弄源代码的情况下解决这个问题的唯一方法是通过自制软件之类的东西安装 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 不兼容相关的各种奇怪结果。

相关内容

最新更新