对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有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搜索并找到了这些
gem install: Failed to build gem native extension (can't find header files) - 此处的说明似乎特定于正在安装的宝石。
How to install json gem - Failed to build gem native extension这似乎有点不同的错误。
任何提示?谢谢!
答案 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-dev
(ruby-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软件包解决了这个问题:
答案 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上,头文件不再位于旧位置,并且旧的/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
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