新的10.9 OSX中用于Ruby Gems的命令行工具?

39

安装了OSX Mavericks 10.9演示版之后,运行bundle出现了这个错误

    Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb 
extconf.rb:17: Use RbConfig instead of obsolete and deprecated Config.
checking for socket() in -lsocket... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/sandric/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
    --with-iconv-dir
    --without-iconv-dir
    --with-iconv-include
    --without-iconv-include=${iconv-dir}/include
    --with-iconv-lib
    --without-iconv-lib=${iconv-dir}/lib
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --with-socketlib
    --without-socketlib
/Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:476:in `try_link'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:619:in `try_func'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:845:in `block in have_library'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
    from /Users/sandric/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:840:in `have_library'
    from extconf.rb:27:in `<main>'


Gem files will remain installed in /Users/sandric/.bundler/tmp/5282/gems/libxml-ruby-2.6.0 for inspection.
Results logged to /Users/sandric/.bundler/tmp/5282/gems/libxml-ruby-2.6.0/ext/libxml/gem_make.out
An error occurred while installing libxml-ruby (2.6.0), and Bundler cannot continue.
Make sure that `gem install libxml-ruby -v '2.6.0'` succeeds before bundling.

我认为我没有命令行工具,所以尝试下载一些。结果发现我的XCode中没有通常的链接(它是4而不是5,不知道为什么。如果有安装第五版Xcode的方法,请帮忙)。所以我去了苹果开发者网站,但在10.9中找不到命令行工具。我尝试了10.8 - 它打印出“尝试安装10.7的工具”,尝试使用10.7的工具后 - 它打印出“尝试10.8的工具”。

请帮我。我会提供所有需要的信息。


3
我刚刚尝试安装一个 Ruby Gem,却出现了相同的错误。即使在 Xcode5 中,命令行工具似乎也无法解决这个问题。 - Hons
8个回答

99

简而言之:

xcode-select --install

在OS X 10.9中,命令行开发者工具现在会在需要时进行安装(这就是您在后面的评论中提到的弹出窗口)。
第一次尝试使用其中一个命令行工具时,将呈现弹出窗口,并且原始命令将返回一条消息,指出需要安装命令行工具,并带有错误代码。 在这种情况下,问题是ruby进程隐藏了关于需要命令行工具的消息。
如果您希望显式安装命令行工具(而不是等待触发弹出窗口),则可以运行 xcode-select --install。 命令行工具包也可以作为独立下载从http://developer.apple.com/downloads获取。
请注意,如果您已在系统上安装了Xcode,则不再需要单独的命令行工具包,/usr/bin中的工具将自动使用位于Xcode应用程序内部的工具。 这就是为什么Xcode UI不再为您提供安装命令行工具的选项的原因。

2
即使您已经安装了Xcode,它也需要是Xcode 5,并且xcode-select需要指向该特定的Xcode。这对我来说解决了问题。 - nschum
2
我认为我需要指向那个特定的Xcode...但是我该怎么做呢? - Fritzz
1
对我来说,仅运行“xcode-select --install”并没有起作用,但在执行该命令后启动Xcode并按照提示操作后就可以了。 - Allan Wintersieck

15

对于其他遇到这个问题的人,我还需要通过brew安装apple-gcc才能使它正常工作:

brew install apple-gcc42


1
这也是对我有效的方法。有人知道为什么只有我们中的一些人需要这样做吗? - JGrubb

8
我在升级到OSX Mavericks后安装gems时遇到了同样的问题。我在错误信息中看到了这个:
make: gcc-4.2: No such file or directory

这表明它在查找gcc时遇到了问题。当我键入“ls /usr/bin”时,我看到有“gcc”,但没有“gcc-4.2”。因此我设置了一个符号链接告诉它去“gcc”而不是“gcc-4.2”中查找:

sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

这解决了我的问题。希望能对你有所帮助。

这是我在已安装Xcode 5.0.2的情况下所做的。 - Wes
你让我结束了三个小时的痛苦(一直在碰壁)。谢谢。 - Pierre

5

我必须运行xcode-select --installsudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2两个命令才能让bundle安装ffi


1
XCode 5.0.2在Mavericks上给了我相同的错误。似乎它没有像预期的那样在5.0.1中修复。尝试“xcode-select -- install”命令会弹出一个对话框来安装命令行工具(我已经做了两次),但失败了,因为它们“在服务器上找不到”。也许这种方法已经过时了?biobonnie上面的解决方案对我有用:
sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2 

之后,CocoaPods终于成功安装了!感谢!(虽然我还不能点赞...)


1

我没有足够的声望来发表评论,但 Vyke 的解决方案对我很有帮助/必要。在升级到 Mavericks 后,我的成功之路如下:

  • 从 App Store 安装 xcode(终端无法在服务器上找到它)
  • 打开 xcode 并接受条款
  • 使用 biobonnie 的解决方案移动 GCC 文件
  • rvm system
  • rvm get head
  • gem install yourgemname(在我的情况下是 json)
  • bundle install
  • gem update rake

... 然后我就可以回到更新我们基于 jekyll/octopress 的网站了。


0

我刚刚将Mountain Lion 升级到 Mavericks,然后出现了上面的消息。

最终我启动了XCode并且它要求自动安装组件。 完成后,我重新打包,它就起作用了。


-2
如果您正在使用 Ruby 版本管理器(rvm),以下内容适用于我。
在运行以下命令之前,请确保验证 /Users/yourusername/.rvm/rubies/ 中的符号链接。我的看起来像这样...
default -> /Users/yourusername/.rvm/rubies/ruby-1.9.3-p429

如果您的符号链接未正确设置,您可以使用以下方法进行设置...
cd /Users/yourusername/.rvm/rubies/
ln -s /Users/yourusername/.rvm/rubies/ruby-1.9.3-p429 default

请在命令行中运行以下命令:
rvm system
rvm gemset export system.gems
rvm 1.9.3 #use your Ruby version here
rvm gemset import system.gems

现在你应该准备好安装你的宝石了

gem install yourgemname

1
我不明白你的观点,也不知道它与主题有什么关联,抱歉。 - sandric
1
你的问题是一个宝石扩展构建错误。这个回复旨在帮助您重置您的Ruby版本和gemset,这应该解决您的问题。 - Vyke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接