安装json gem'mkmf.rb时出错无法找到ruby的头文件'

时间:2013-12-13 04:44:21

标签: json ruby rubygems

对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有ruby 1.8.7。当我尝试gem安装..

sudo gem install --http-proxy <host address>:<port> json

我收到以下错误:

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

/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

由于我不确定问题是什么,我用Google搜索并找到了这些

任何提示?谢谢!

18 个答案:

答案 0 :(得分:649)

现代时代更新,stated by mimoralea

  

如果您使用的是ruby 2.0或2.2(感谢@ patrick-davey)。

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

或通用方式:

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

您发布的第一个链接完全您的情况:没有安装ruby开发环境。编译ruby扩展需要开发环境,这些扩展主要是用C编写的。代理与问题无关:一切都下载得很好,只是编译失败。

我建议您在目标计算机上安装ruby-devruby-devel基于rpm的发行版)包。也可能需要gcc包。

尝试:

$ sudo apt-get install ruby-dev

或者,对于Redhat发行版:

$ sudo yum install ruby-devel

或者,对于[open] SuSE:

$ sudo zypper install ruby-devel

答案 1 :(得分:70)

如果您使用的是ruby 2.0或2.2(感谢@ patrick-davey)或2.3(感谢@juanitofatas)。

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

你在这里得到的模式......

答案 2 :(得分:57)

对于 macOS 10.14上的Xcode 11 ,即使在安装Xcode并安装命令行工具并接受许可后,也会发生这种情况

sudo xcode-select --install
sudo xcodebuild -license accept

问题是Xcode 11附带了macOS 10.15 SDK,其中包含ruby2.6的标头,但不包含macOS 10.14的ruby2.3的标头。您可以通过运行

来验证这是您的问题
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

在带有Xcode 11的macOS 10.14上打印不存在路径

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

但是,Xcode 11在/Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk内安装了macOS 10.14 SDK。不必按照其他答案中的建议安装旧的头文件来污染系统目录。相反,通过选择该SDK,将找到适当的ruby2.3标头:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

现在应该可以正确打印

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

同样,gem install应该在选择该SDK时起作用。

要切换回当前的Xcode SDK,请使用

sudo xcode-select --switch /Applications/Xcode.app

答案 3 :(得分:19)

我也遇到过这个问题,因为我install Ruby on Ubuntu via brightbox,我认为ruby-dev是红宝石的主干。所以我没有安装。安装ruby2.3-dev修复它:

sudo apt-get install ruby2.3-dev

答案 4 :(得分:12)

对于那些在Mac OS X上获得此功能的人,您可能需要运行以下命令来安装XCode命令行工具,即使您已经安装了XCode:

sudo xcode-select --install

此外,您必须通过运行以下命令来同意XCode的条款和条件:

sudo xcodebuild -license

答案 5 :(得分:10)

使用cygwin运行以下命令时遇到了类似的问题:

$ gem install rerun

我通过安装以下cygwin软件包解决了这个问题:

  • 红宝石devel的
  • libffi-devel的
  • GCC-芯
  • GCC-克++
  • 使
  • automake1.15

答案 6 :(得分:9)

大多数投票解决方案都无法在我的机器上运行(linux mint 18.04)。 仔细观察后,我发现g ++丢失了。 解决了

  

sudo apt-get install g ++

答案 7 :(得分:8)

如果您使用SUSE

sudo yast2 -i ruby-devel

答案 8 :(得分:4)

在Mac 10.14上,头文件似乎没有安装在正确的位置。与其像其他修补程序一样更改路径,我还可以运行以下命令:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

按照说明操作,它为我解决了这个问题。

答案 9 :(得分:2)

Xcode 11 / macOS Catalina

在Xcode 11 / macOS Catalina上,头文件不再位于旧位置,并且旧的/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg文件不再可用。

相反,标头现在安装在当前SDK路径的/usr/include目录中:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

可以使用xcrun --show-sdk-path的输出找到该目录的大部分内容。而且,如果将此路径添加到CPATH环境变量中,则构建脚本(包括通过bundle调用的脚本)通常将能够找到它。

我通过在CPATH文件中设置.zshrc来解决此问题:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

打开新的外壳程序(或运行source .zshrc)后,我不再收到错误消息 mkmf.rb在/usr/lib/ruby/ruby.h找不到ruby的头文件和rubygems正确安装。

  

关于构建非macOS平台的说明

     

如果要在非macOS平台(例如iOS / tvOS / watchOS)上构建,此更改将尝试将macOS SDK包括在这些平台中,从而导致构建错误。要解决此问题,请不要在登录时设置CPATH环境变量,或者在运行xcodebuild时将其临时设置为空白,如下所示:

CPATH="" xcodebuild --some-args

答案 10 :(得分:2)

在Fedora 21及更高版本中,您只需打开一个终端并以root身份安装Ruby Development文件。

dnf install ruby-devel

答案 11 :(得分:1)

您可能需要在安装ruby-devel

之后安装gcc

答案 12 :(得分:1)

Xcode->首选项->位置

将命令行工具更改为Xcode 11.2.1

答案 13 :(得分:0)

您需要安装整个红宝石,而不仅仅是最小的软件包。正确使用的命令是:

HubConnectionBuilder

以下命令也不会安装完整的红宝石:

sudo apt install ruby-full

答案 14 :(得分:0)

对于Ubuntu 18,在检查安装过程中提到的日志文件后

结果记录到/var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

使用

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

我注意到找不到make。因此安装了make by

sudo apt-get install make

一切正常。

答案 15 :(得分:0)

在macOS 10.15 和cocoapods的 Xcode 12 上,我也遇到了类似的问题。只要确保xcode-select命令指向您要构建的SDK。此后它应该不会出现问题。

答案 16 :(得分:0)

之前,请按照Joki的答案(如下)和 IF 进行提示:

  • 您具有MacOS 10.14.6

  • 在/ Library / Developer / CommandLineTools / SDKs /中的
  • MacOSX.sdk(符号),MacOSX10.14.sdk,MacOSX10.15.sdk

  • 将MacOSX10.15.sdk移动到任何地方(需要管理员权限)

  • 删除符号链接(需要管理员权限)

  • 在/ Library / Developer / CommandLineTools / SDKs /中创建另一个符号链接,现在使用(需要管理员特权)到MacOSX10.14.sdk文件夹

    sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk MacOSX.sdk

  • 现在您可以按照Joki的回答

警告! 如果再次将MacOSX10.15.sdk文件夹移动到/ Library / Developer / CommandLineTools / SDKs /,则命令

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

将再次显示MacOSX10.15.sdk文件夹,例如默认文件夹,如今我不知道如何解决它!我的建议是,压缩文件夹,然后将原始文件夹放入,直到可以修复为止。

答案 17 :(得分:-1)

sudo apt-get --reinstall install ruby

尝试使用Ubuntu 16.04