ChatGPT解决这个技术问题 Extra ChatGPT

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

对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有 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

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

gem install: 无法构建 gem 原生扩展(找不到头文件) - 这里的说明似乎特定于正在安装的 gem。

如何安装 json gem - 无法构建 gem 本机扩展 这似乎是略有不同的错误。

有什么提示吗?谢谢!

检查 /usr/lib/ruby/ruby.h 文件的存在,如果存在,向我们显示来自 gem_make.out 的错误消息。

r
rogerdpack

现代时代更新,如 stated by 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-dev(对于基于 rpm 的发行版为 ruby-devel)包。

gcc 包也可能需要。

尝试:

$ sudo apt-get install ruby-dev

或者,对于 Redhat 发行版:

$ sudo yum install ruby-devel

或者,对于 [open]SuSE:

$ sudo zypper install ruby-devel

谢谢!我的意思是那个问题的答案似乎是特定于模块的。我认为不是 ruby-dev 它是 ruby-devel。在这里我找到了我真正需要的东西 - digitalocean.com/community/articles/…
安装 ruby-devel(在 Fedora 20 上)后,我收到错误 *** extconf.rb failed ***。按照您的建议安装 gcc 后,一切正常。
您可以为 openSUSE 添加 sudo zypper install ruby-devel
不,这个答案无助于解决任何问题。正确答案是the one by mimoralea
我注意到在 debian 上我必须安装 gcc 和 make
j
joki

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

传奇。正是我在 10.14.6 上的问题。悲伤不能投票两次。
先生,您是一个默默无闻的知识霸主。非常感谢,
如果您需要(或想要)为单个命令或脚本切换所选 Xcode SDK,您可以使用 xcode-select(1) 中记录的 DEVELOPER_DIR 环境变量。例如:DEVELOPER_DIR=/Library/Developer/CommandLineTools/ bundle install
👍👍👍👍 总传奇
你这该死的编码传奇。
m
mimoralea

如果您使用的是 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.2 ... sudo apt-get install ruby2.2-dev
@patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
@dson 可能您使用的是旧的 Ubuntu 版本。尝试升级。
我也遇到了同样的错误,我使用的是 Linux Mint 的完全更新版本。我认为操作系统版本不是问题。
如果您使用的是旧版本的 Ubuntu,例如 Trusty (14.04),请添加适用于 Ruby 的亮盒 PPA:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
J
Juanito Fatas

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

sudo apt-get install ruby2.3-dev

J
Juan De León

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

sudo xcode-select --install

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

sudo xcodebuild -license

这对我来说是正确的答案。我没有 Ruby 开发头文件。一旦我安装了 xCode,我尝试运行的原始命令就起作用了。谢谢!
在带有 Mojave 的 OSX 上,我必须将其运行为:su - $USER -c 'xcode-select --install'
K
Kinifwyne

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

$ gem install rerun

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

红宝石开发

libffi开发

gcc核心

gcc-g++

制作

汽车制造1.15


这对我来说是段错误:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
通过执行 rm -rf ~/.gem/ 并重新发出命令解决。
ruby-dev 在树莓派上
M
Manuel Fedele

大多数投票的解决方案在我的机器上不起作用(linux mint 18.04)。仔细一看,发现g++不见了。解决了

sudo apt-get install g++


这在 Ubuntu 18.04 上对我有用。在 g++ install 工作之前,我还必须执行 sudo apt-get install make 。
可以确认安装 makeg++ 也解决了我在 Ubuntu 18.04 上的问题!
U
Undo

如果您使用 SUSE

sudo yast2 -i ruby-devel

我更喜欢sudo zypper in ruby-devel
A
Aaron Brager

Xcode 11 / macOS 卡塔利娜

在 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 调用的那些)通常能够找到它。

我通过在我的 .zshrc 文件中设置我的 CPATH 解决了这个问题:

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

打开新的 shell(或运行 source .zshrc)后,我不再收到错误消息 mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h 和rubygems 安装正确。

关于构建到非 macOS 平台的注意事项 如果您正在构建到非 macOS 平台,例如 iOS/tvOS/watchOS,此更改将尝试在这些平台中包含 macOS SDK,从而导致构建错误。要解决此问题,请不要在登录时设置 CPATH 环境变量,或者在运行 xcodebuild 时将其临时设置为空白,如下所示: CPATH="" xcodebuild --some-args


你有关于 CPATH 的任何文档吗?设置它并不能解决我的问题。当我首先检查它的值时,它看起来是未定义的。
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - 根据您使用的语言/编译器,您可能需要找到不同的环境变量。默认不设置是正常的
而且,如果您没有在其他地方看到它,Xcode 路径/名称中不能有空格
从这里的所有答案中,这是唯一对我有用的解决方案。我在 Mojave 10.14.6XCode 11.3.1。非常感谢,我花了 1 天时间解决这个问题:/
e
emmojo

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

dnf install ruby-devel

S
Shawn Lauzon

在 Mac 10.14 上,头文件似乎没有安装在正确的位置。而不是像其他修复那样更改路径,我能够运行这个:

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

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


b
bott

安装 ruby-devel 后可能需要安装 gcc


C
Chester Fang

Xcode -> 首选项 -> 位置

将命令行工具更改为 Xcode 11.2.1


a
aleksander_si

你需要安装整个 ruby 而不仅仅是最小的包。正确使用的命令是:

sudo apt install ruby-full

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

sudo apt-get install ruby2.3-dev

G
Gökçer Gökdal

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

sudo apt-get install make

一切正常。


j
jarr

我在使用 macOS 10.15 和 cocoapods 的 Xcode 12 上遇到了类似的问题。只需确保 xcode-select 命令指向您要构建的 SDK。之后它应该没有问题。


C
Carlos Thadeu

在您遵循 Joki 的回答(如下)和 IF 的提示之前:

你有 MacOS 10.14.6

在 /Library/Developer/CommandLineTools/SDKs/ 你有文件夹 MacOSX.sdk(symbolic), 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 文件夹,现在我不知道如何修复它!我的建议是,压缩文件夹并放置原始文件夹,直到修复可用。


A
Ajmal Aamir
sudo apt-get --reinstall install ruby

试试 ubuntu 16.04


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅