[英]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
由於我不確定問題是什么,我用谷歌搜索並找到了這些
gem install: 無法構建 gem 本機擴展(找不到頭文件) - 這里的說明似乎特定於正在安裝的 gem。
如何安裝 json gem - 無法構建 gem 本機擴展這似乎是略有不同的錯誤。
任何提示? 謝謝!
現代更新,如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
( ruby-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,其中包括 ruby2.6 的頭文件,但不包括 macOS 10.14 的 ruby2.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,將找到適當的 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
如果您使用的是 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的主干。 所以我沒有安裝。 安裝 ruby2.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 包解決了這個問題:
如果您使用 SUSE
sudo yast2 -i ruby-devel
在 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 的頭文件,並且 rubygems 安裝正確。
構建到非 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.