ruby - Gem 安装错误 : You have to install development tools first (Windows)

标签 ruby windows sinatra

此问题适用于 Windows

我尝试安装 gem ' sinatra-websocket ',但是当我运行 gem install sinatra-websocket 时,我得到了这个错误...

错误:构建 gem 原生扩展失败

...连同...

C:/Ruby193/bin/ruby.exe extconf.rb
checking for main() in -lc... *** 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=C:/Ruby193/bin/ruby
    --with-thin_parser-dir
    --without-thin_parser-dir
    --with-thin_parser-include
    --without-thin_parser-include=${thin_parser-dir}/include
    --with-thin_parser-lib
    --without-thin_parser-lib=${thin_parser-dir}/lib
    --with-clib
    --without-clib
C:/Ruby193/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 C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:476:in `try_link'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:619:in `try_func'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:845:in `block in have_library'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:254:in `open'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:280:in `postpone'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for'
    from C:/Ruby193/lib/ruby/1.9.1/mkmf.rb:840:in `have_library'
    from extconf.rb:4:in `<main>'

这是 C:\Ruby193\lib\ruby\gems\1.9.1\gems\thin-1.6.3\ext\thin_parser 中的 mkmf 文件的内容喜欢:

"gcc -o conftest -IC:/Ruby193/include/ruby-1.9.1/i386-mingw32 -IC:/Ruby193/include/ruby-1.9.1/ruby/backward -IC:/Ruby193/include/ruby-1.9.1 -I. -DFD_SETSIZE=2048  -DFD_SETSIZE=2048  -O3 -fno-omit-frame-pointer -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c  -L. -LC:/Ruby193/lib -L.   -march=i486   -lmsvcrt-ruby191  -lshell32 -lws2_32 -limagehlp -lshlwapi  "
checked program was:
/* begin */
1: #include "ruby.h"
2: 
3: #include <winsock2.h>
4: #include <windows.h>
5: int main(int argc, char **argv)
6: {
7:   return 0;
8: }
/* end */

我使用的是 Windows 7。

为什么我会收到错误消息?有一行内容为“无法创建 Makefile...”,但这是否相关?

最佳答案

同样适用于 Mac:

如果您的系统上尚未安装 xcode 开发工具(可能您最近升级了操作系统或 Xcode),请运行 xcode-select --install

否则,更具侵入性的修复方法是使用 --switch 标志设置事件目录

sudo xcode-select --switch/

来自 xcode-select 手册:

  -s <path>, --switch <path>
          Sets the active developer directory to the given path, for example
          /Applications/Xcode-beta.app. This command must be run with
          superuser permissions (see sudo(8)), and will affect all users on
          the system. To set the path without superuser permissions or only
          for the current shell session, use the DEVELOPER_DIR environment
          variable instead (see ENVIRONMENT).

如果您已经安装了 Xcode,您可能会遇到不同的问题,在这种情况下,请参阅这篇文章 Installing puma 5.6.2 with native extensions Gem::Ext::BuildError: ERROR: Failed to build

关于ruby - Gem 安装错误 : You have to install development tools first (Windows),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768420/

相关文章:

ruby - Sinatra 的测试框架

ruby-on-rails - 在一个项目中使用两个不同的数据库

windows - 如何通过程序检查应用是否发出某种声音?

c - 为什么这个 SIMD 示例代码可以使用 minGW 进行 C 编译,但可执行文件无法在我的 Windows 计算机上运行?

windows - 检测一个程序是否已经安装了 NSIS

javascript - 如何从 Sinatra 中的特定页面重定向网页?

ruby - 在什么情况下会使用 Sinatra 或 Merb?

ruby - 打印 block 的实际 Ruby 代码?

ruby-on-rails - 如何测试方法别名 ruby

ruby - `def +@` 和 `def -@` 是什么意思?