对于上下文,它位于具有防火墙的远程服务器上。我正在通过代理设置我的环境。我有 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
的错误消息。
现代时代更新,如 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
对于 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
xcode-select(1)
中记录的 DEVELOPER_DIR
环境变量。例如:DEVELOPER_DIR=/Library/Developer/CommandLineTools/ bundle install
如果您使用的是 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
你得到了这里的模式......
sudo apt-get install ruby2.2-dev
E: Unable to locate package ruby2.2-dev
E: Couldn't find any package by regex 'ruby2.2-dev'
sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
我也遇到了这个问题,因为我install Ruby on Ubuntu via brightbox,我以为ruby-dev是ruby的主干。所以我没有安装。安装 ruby2.3-dev 修复它:
sudo apt-get install ruby2.3-dev
对于那些在 Mac OS X 上获得此功能的人,您可能需要运行以下命令来安装 XCode 命令行工具,即使您已经安装了 XCode:
sudo xcode-select --install
此外,您必须通过运行以下命令同意 XCode 的条款和条件:
sudo xcodebuild -license
su - $USER -c 'xcode-select --install'
我在使用 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
在树莓派上
大多数投票的解决方案在我的机器上不起作用(linux mint 18.04)。仔细一看,发现g++不见了。解决了
sudo apt-get install g++
make
和 g++
也解决了我在 Ubuntu 18.04 上的问题!
如果您使用 SUSE
sudo yast2 -i ruby-devel
sudo zypper in ruby-devel
。
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
Mojave 10.14.6
和 XCode 11.3.1
。非常感谢,我花了 1 天时间解决这个问题:/
在 Fedora 21 及更高版本中,您只需打开一个终端并以 root 身份安装 Ruby 开发文件。
dnf install ruby-devel
在 Mac 10.14 上,头文件似乎没有安装在正确的位置。而不是像其他修复那样更改路径,我能够运行这个:
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
按照说明操作,它为我解决了这个问题。
安装 ruby-devel 后可能需要安装 gcc
Xcode -> 首选项 -> 位置
将命令行工具更改为 Xcode 11.2.1
你需要安装整个 ruby 而不仅仅是最小的包。正确使用的命令是:
sudo apt install ruby-full
以下命令也不会安装完整的 ruby:
sudo apt-get install ruby2.3-dev
对于 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
一切正常。
我在使用 macOS 10.15 和 cocoapods 的 Xcode 12 上遇到了类似的问题。只需确保 xcode-select 命令指向您要构建的 SDK。之后它应该没有问题。
在您遵循 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 文件夹,现在我不知道如何修复它!我的建议是,压缩文件夹并放置原始文件夹,直到修复可用。
sudo apt-get --reinstall install ruby
试试 ubuntu 16.04
ruby-dev
它是ruby-devel
。在这里我找到了我真正需要的东西 - digitalocean.com/community/articles/…sudo zypper install ruby-devel