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

因为我不确定是什么问题,我谷歌了一下,找到了这些

gem安装:构建gem本地扩展失败(找不到头文件)-这里的说明似乎是特定于正在安装的gem。 如何安装json gem -未能建立gem本地扩展这似乎是略有不同的错误。

有提示吗?谢谢!


当前回答

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

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

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

在打开一个新的shell(或运行source .zshrc)后,我不再收到错误消息mkmf。Rb无法在/usr/lib/ruby/ruby.h找到ruby的头文件,rubygems安装正确。

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

其他回答

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

sudo xcode-select --install

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

sudo xcodebuild -license

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

dnf install ruby-devel

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

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

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

在打开一个新的shell(或运行source .zshrc)后,我不再收到错误消息mkmf。Rb无法在/usr/lib/ruby/ruby.h找到ruby的头文件,rubygems安装正确。

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

如果你正在使用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

你在这里得到了模式。

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

$ gem install rerun

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

ruby-devel libffi-devel gcc核心 gcc-g + + 使 automake1.15