作为上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置环境。我有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本地扩展这似乎是略有不同的错误。
有提示吗?谢谢!
现代更新,如mimoralea所述:
如果你正在使用ruby 2.0或2.2(谢谢@patrick-davey)。
安装ruby2.0-dev
安装ruby2.2-dev
Sudo apt-get安装ruby2.3-dev
或者,一般来说:
安装ruby-dev
或
sudo apt-get install ruby ' ruby -e '将RUBY_VERSION[/\d+\.\d+/]' ' -dev
你发布的第一个链接正是你的情况:没有安装ruby开发环境。需要开发环境来编译ruby扩展,这些扩展大多是用c编写的,Proxy与这个问题无关:下载一切都很好,只是编译失败。
我建议你在目标机器上安装ruby-dev (ruby-devel用于基于rpm的发行版)包。
可能还需要GCC包。
Try:
$ sudo apt-get install ruby-dev
或者,对于Redhat发行版:
$ sudo yum install ruby-devel
或者,对于[open]SuSE:
$ sudo zypper install ruby-devel
在你按照Joki回答的建议(下面)和如果:
你有MacOS 10.14.6
在/Library/Developer/CommandLineTools/ sdk /目录下有文件夹
MacOSX10.14 MacOSX.sdk(象征性的)。sdk, MacOSX10.15.sdk
MacOSX10.15移动。SDK到任何地方(需要管理特权)
删除符号链接(需要管理员权限)
在/Library/Developer/CommandLineTools/ sdk /目录下创建另一个指向MacOSX10.14的符号链接。SDK文件夹使用(需要管理权限)
sudo ln -s /Library/Developer/CommandLineTools/ sdk /MacOSX10.14.使用实例sdk MacOSX.sdk
现在你可以跟着Joki的答案走了
警告!
如果你移动MacOSX10.15。sdk文件夹到/Library/Developer/CommandLineTools/ sdk /再次,命令
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'
将显示MacOSX10.15。sdk文件夹像默认再次,现在我不知道如何修复它!我的建议,压缩文件夹,并把原来的文件夹,直到修复将可用。
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 .
现代更新,如mimoralea所述:
如果你正在使用ruby 2.0或2.2(谢谢@patrick-davey)。
安装ruby2.0-dev
安装ruby2.2-dev
Sudo apt-get安装ruby2.3-dev
或者,一般来说:
安装ruby-dev
或
sudo apt-get install ruby ' ruby -e '将RUBY_VERSION[/\d+\.\d+/]' ' -dev
你发布的第一个链接正是你的情况:没有安装ruby开发环境。需要开发环境来编译ruby扩展,这些扩展大多是用c编写的,Proxy与这个问题无关:下载一切都很好,只是编译失败。
我建议你在目标机器上安装ruby-dev (ruby-devel用于基于rpm的发行版)包。
可能还需要GCC包。
Try:
$ sudo apt-get install ruby-dev
或者,对于Redhat发行版:
$ sudo yum install ruby-devel
或者,对于[open]SuSE:
$ sudo zypper install ruby-devel