【问题标题】:Can't install thrift gem on OS X El Capitan无法在 OS X El Capitan 上安装 thrift gem
【发布时间】:2016-07-22 13:12:57
【问题描述】:

在 OSX El Capitan 升级后尝试安装 thift gem:

    $ gem install thrift
    Building native extensions.  This could take a while...
    ERROR:  Error installing thrift:
        ERROR: Failed to build gem native extension.

        /Users/foo/.rvm/rubies/ruby-2.1.4/bin/ruby -r ./siteconf20160402-32256-7dzqel.rb extconf.rb
    checking for strlcpy() in string.h... yes
    creating Makefile

    make "DESTDIR=" clean

    make "DESTDIR="
    compiling binary_protocol_accelerated.c
    compiling bytes.c
    compiling compact_protocol.c
    compact_protocol.c:442:41: error: shifting a negative signed value is undefined [-Werror,-Wshift-negative-value]
        rb_exc_raise(get_protocol_exception(INT2FIX(-1), rb_str_new2(buf)));
                                            ^~~~~~~~~~~

编译失败 compact_protocol.c:442:41: 错误:移动负符号值未定义 [-Werror,-Wshift-negative-value]

【问题讨论】:

  • 您接受新的 Xcode EULA 了吗?
  • 你的 gcc 版本是多少?尝试使用 gcc 4.x。例如。 brew install gcc49ln -s /usr/local/bin/gcc-49 /usr/local/bin/gcc。确保 gcc --version 返回 GNU 编译器,而不是 Apple LLVM,然后安装 gem:gem install thrift
  • 这不是重复的,我有同样的错误,我相信它与这里的错误描述有关:bugs.freebsd.org/bugzilla/show_bug.cgi?id=202660。 ruby 版本
  • @Anton:既然我已经重新打开了这个问题,请将您的解决方案/更新发布为一个充实的答案,而不是将其附加到问题中
  • @MichałKnapik 谢谢你的建议,但这对我在 El Capitan 10.11.4 上不起作用。

标签: ruby rubygems thrift


【解决方案1】:

我有一个解决方案!希望。

前几天遇到了同样的问题。

问题在于 El Capitan 捆绑的 clang 编译器。我确信它会搞砸其他问题,但这是我遇到很多问题的一点。

尝试运行以下命令,让我知道结果如何!

gem install thrift -- --with-cppflags=\"-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value\"

【讨论】:

  • 这个方法对我不起作用。 clang 版本:Apple LLVM version 7.3.0 (clang-703.0.29),os x 版本:El Capitan 10.11.4
  • 可能想打开一个单独的问题,然后从该命令输出完整的错误,以便我们更好地帮助您!
  • 这适用于 gem install,但 bundle install 不起作用。我试过bundle config build.thrift "--with-cppflags=-D_FORTIFY_SOURCE=0" 但这不起作用,关于如何解决捆绑配置中的 -Wno-shift-negative-value 选项的任何想法?
【解决方案2】:

你需要转义双引号。

$ bundle config build.thrift "--with-cppflags=\"-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value\""

$ cat ~/.bundle/config

BUNDLE_BUILD__THRIFT:--with-cppflags="-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value"

【讨论】:

  • 这对我不起作用:BUNDLE_BUILD__THRIFT: "--with-cppflags=\"-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value\""
  • 对于 jenkins 构建,我不得不转义两个变量之间的空格:bundle config build.thrift "--with-cppflags=\"-D_FORTIFY_SOURCE=0\ -Wno-shift-negative-value\""
【解决方案3】:

Big Sur有帮助https://github.com/instructure/canvas-lms/issues/827#issuecomment-946388555

gem install thrift -v 0.15.0 -- --with-cppflags="-Wno-compound-token-split-by-macro"

【讨论】:

    【解决方案4】:

    这在 mac bigsur 上对我有用

    gem install thrift -v '0.10.0.0' -- --with-cppflags="-D_FORTIFY_SOURCE=0 -Wno-shift-negative-value -Wno-compound-token-split-by-macro" 
    

    【讨论】:

      【解决方案5】:

      试试这个

      gem install thrift -v '0.9.0' -- --with-cppflags='-D_FORTIFY_SOURCE=0'
      

      【讨论】:

      • 0.9.0 版本相当老,已知存在严重问题。不推荐。
      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2016-03-15
      相关资源
      最近更新 更多