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


406

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

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

由于我不确定是什么问题,因此我搜索了一下并找到了这些

有什么提示吗?谢谢!


检查/usr/lib/ruby/ruby.h文件是否存在,如果存在,请向我们显示错误消息gem_make.out
МалъСкрылевъ

Answers:


785

mimoralea所述,现代更新:

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

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-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

2
谢谢!我的意思是这个问题的答案似乎是特定于模块的。我认为不是ruby-devruby-devel。此处,我发现我究竟需要- digitalocean.com/community/articles/...
那伏乃尔

9
安装ruby-devel(在Fedora 20上)后,出现错误*** extconf.rb失败***。按照您的建议安装gcc后,一切正常。
韦恩·里斯特

您可以添加sudo zypper install ruby-developenSUSE
superbob '16

这在Ubuntu上不起作用。缺少的软件包是ruby2.2-dev(或您安装的任何版本)。
路易斯·德·索萨

2
不,这个答案无助于解决任何问题。正确的答案是含羞草的答案。
路易斯·德·索萨

177

对于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在中安装了macOS 10.14 SDK /Library/Developer/CommandLineTools/SDKs/MacOS10.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

14
传说。正是我在10.14.6上遇到的问题。悲伤不能投票两次。
迭戈·弗雷尼切

2
先生,您是一位默默无闻的知识霸主。非常感谢,
鲁宾·西蒙斯

感谢您提供详细信息!最终成功了,并产生了“错误:安装jekyll时出错:jekyll-sass-converter需要Ruby版本> = 2.4.0。”。那使我发笑。
Nickolay Olshevsky

在这种情况下,@NickolayOlshevsky,您需要通过自制软件安装Ruby,当前版本为2.6.5。
joki

1
你freakin编码传奇。
Aljosha Novakovic

75

如果您使用的是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

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


6
或者,如果您使用的是2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey 2015年

@ patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dson可能您使用的是旧版Ubuntu。尝试升级。
Pithikos 2015年

我也遇到了同样的错误,并且我使用的是Linux Mint的完全更新版本。我认为操作系统版本不是问题。
Andrew Faulkner

2
如果您使用的是Ubuntu的旧版本,例如Trusty(14.04),则为Ruby添加Brightbox PPA:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu 2016年


18

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

sudo xcode-select --install

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

sudo xcodebuild -license

这对我来说是正确的答案。我没有Ruby开发标头。一旦安装了xCode,我尝试运行的原始命令就可以了。谢谢!
Sweet Chilly Philly,

在OSX和Mojave上,我必须这样运行:su - $USER -c 'xcode-select --install'
Belden

11

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

$ gem install rerun

我通过安装以下cygwin软件包解决了它:

  • 红宝石级
  • libffi-devel
  • gcc核心
  • gcc-g ++
  • 使
  • automake1.15

这对我来说是段错误:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

通过执行rm -rf ~/.gem/并重新发出命令来解决。
rr-

ruby-dev在树莓
派上

11

投票最多的解决方案在我的机器上不起作用(Linux Mint 18.04)。仔细查看后,我发现缺少g ++。解决了

须藤apt-get install g ++


1
这在Ubuntu 18.04上对我有用。在安装g ++之前,我还必须先执行sudo apt-get install make。
Scott Lindner '18

也可以确认在Ubuntu 18.04上安装makeg++修复了我的问题!
Arda


5

Xcode 11 / macOS卡塔琳娜

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

而是将标头安装到/usr/include当前SDK路径的目录中:

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

可以使用的输出找到此目录的大部分内容xcrun --show-sdk-path。而且,如果您将此路径添加到CPATH环境变量中,那么构建脚本(包括通过via调用的脚本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

2
您有关于CPATH的任何文档吗?设置它并不能解决我的问题。当我首先检查它的值时,它似乎未定义。
伊利亚斯·卡里姆

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html-根据您使用的语言/编译器,您可能需要找到其他环境变量。正常情况下,默认情况下不会将其取消设置
Aaron Brager

而且,如果您在其他地方没有看到它,则Xcode路径/名称中不能有空格
Feldur

从这里的所有答案来看,这是唯一对我有用的解决方案。我在Mojave 10.14.6XCode 11.3.1。非常感谢,花了我1天的时间解决了这个问题:/
user2350644

4

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

dnf install ruby-devel



1

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

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

按照说明进行操作,即可为我解决此问题。


0

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

sudo apt install ruby-full

以下命令也不会安装完整的Ruby:

sudo apt-get install ruby2.3-dev

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找不到。如此安装使

sudo apt-get install make

一切正常。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.