簡體   English   中英

安裝 json gem 時出錯“mkmf.rb 找不到 ruby​​ 的頭文件”

[英]Error while installing json gem 'mkmf.rb can't find header files for ruby'

對於上下文,它位於具有防火牆的遠程服務器上。 我正在通過代理設置我的環境。 我有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

由於我不確定問題是什么,我用谷歌搜索並找到了這些

任何提示? 謝謝!

現代更新,如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-devruby-devel用於基於 rpm 的發行版)包安裝到您的目標機器上。

也可能需要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,其中包括 ruby​​2.6 的頭文件,但不包括 macOS 10.14 的 ruby​​2.3。 您可以通過運行來驗證這是您的問題

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

在 macOS 10.14 和 Xcode 11 上打印不存在的路徑

/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,將找到適當的 ruby​​2.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

如果您使用的是 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

你在這里得到了模式......

我也遇到這個問題,因為我在Ubuntu上通過brightbox安裝Ruby ,我以為ruby-dev是ruby的主干。 所以我沒有安裝。 安裝 ruby​​2.3-dev 修復它:

sudo apt-get install ruby2.3-dev

對於那些在 Mac OS X 上獲得此功能的用戶,即使您已經安裝了 XCode,您也可能需要運行以下命令來安裝 XCode 命令行工具:

sudo xcode-select --install

您還必須通過運行以下命令來同意 XCode 的條款和條件:

sudo xcodebuild -license

大多數投票的解決方案在我的機器上不起作用(linux mint 18.04)。 仔細一看,發現g++不見了。 解決了

sudo apt-get install g++

我在使用 cygwin 運行以下命令時遇到了類似的問題:

$ gem install rerun

我通過安裝以下 cygwin 包解決了這個問題:

  • 紅寶石開發
  • libffi-devel
  • gcc核心
  • gcc-g++
  • 制作
  • automake1.15

如果您使用 SUSE

sudo yast2 -i 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調用的腳本)通常能夠找到它。

我解決了這個設置我的CPATH在我的.zshrc文件:

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

打開新的 shell(或運行source .zshrc )后,我不再收到錯誤消息mkmf.rb 無法在 /usr/lib/ruby/ruby.h 中找到 ruby​​ 的頭文件,並且 ruby​​gems 安裝正確。

構建到非 macOS 平台的注意事項

如果您要構建到非 macOS 平台,例如 iOS/tvOS/watchOS,此更改將嘗試在這些平台中包含 macOS SDK,從而導致構建錯誤。 要解決,請不要在登錄時設置CPATH環境變量,或者在運行xcodebuild時將其臨時設置為空白,如下所示:

 CPATH="" xcodebuild --some-args

在 Fedora 21 及更高版本中,您只需打開一個終端並以 root 身份安裝 Ruby Development 文件。

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 by

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM