json gem 'mkmf.rbがrubyのヘッダーファイルを見つけられません'のインストール中にエラーが発生しました


407

コンテキストとしては、ファイアウォールを備えたリモートサーバー上です。プロキシを介して環境を設定しています。持ってい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

問題が何なのかわからなかったので、ググってみました

ヒントはありますか?よろしくお願いします!


/usr/lib/ruby/ruby.hファイルの存在を確認し、存在する場合は、からのエラーメッセージを表示しgem_make.outます。
МалъСкрылевъ

回答:


785

ミモレラが述べた現代の更新:

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-develrpmベースのディストリビューションの場合)パッケージをインストールすることをお勧めします。

gcc パッケージも必要になる場合があります。

試してください:

$ sudo apt-get install ruby-dev

または、Redhatディストリビューションの場合:

$ sudo yum install ruby-devel

または、[open] SuSEの場合:

$ sudo zypper install ruby-devel

2
ありがとう!その質問の答えはモジュール固有のように見えた。ruby-devその代わりに私は思いますruby-devel。私は私がまさに必要なものを見つけるのはここだ- digitalocean.com/community/articles/...
Navneet

9
(Fedora 20に)ruby-develをインストールした後、エラー*** extconf.rb failed ***が発生しました。あなたが提案したようにgccをインストールしたら、すべてがうまくいきました。
Wayne Riesterer、2014

sudo zypper install ruby-developenSUSEに追加できます
スーパーボブ2016

これはUbuntuでは何もしません。不足しているパッケージruby2.2-dev(またはインストールしたバージョン)です。
ルイス・デ・スーザ

2
いいえ、この回答は何の解決にも役立ちませんでした。正解は、ミモレラによるものです
ルイス・デ・スーザ

177

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は内にmacOS 10.14 SDKをインストールします/Library/Developer/CommandLineTools/SDKs/MacOS10.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

14
伝説。正確に10.14.6での私の問題。悲しいことは二度賛成することはできません。
Diego Freniche

2
あなた、先生、あいまいな知識の君主です。どうもありがとう
Rubin Simons

詳細情報ありがとうございます!ついに動作し、「エラー:jekyllのインストール中にエラーが発生しました:jekyll-sass-converterにはRubyバージョン> = 2.4.0が必要です。」が生成されました。それは私を笑わせます。
Nickolay Olshevsky

@NickolayOlshevskyその場合、homebrew(現在バージョン2.6.5)経由でrubyをインストールする必要があります。
joki

1
あなたはコーディングの伝説を狂わせます。
アルジョシャノバコビッチ

75

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

そして、あなたはここにパターンを取得します...


6
または、2.2を使用している場合...sudo apt-get install ruby2.2-dev
patrickdavey

@ patrick-daveyE: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dsonはおそらく古いUbuntuバージョンを使用しています。アップグレードしてみてください。
ピティコス

同じエラーが発生し、完全に更新されたバージョンのLinux Mintを使用しています。OSバージョンが問題だとは思いません。
Andrew Faulkner

2
:あなたは、このようなトラスティ(14.04)、ルビーのためbrightbox PPAを追加するとUbuntuの古いバージョンを使っている場合sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

Mac OS Xでこれを取得している場合は、次のコマンドを実行して、XCodeがすでにインストールされている場合でも、XCodeコマンドラインツールをインストールする必要があります。

sudo xcode-select --install

また、次のコマンドを実行して、XCodeの契約条件に同意する必要があります。

sudo xcodebuild -license

これは私にとって正しい答えでした。Ruby開発ヘッダーはありませんでした。xCodeをインストールすると、実行しようとした元のコマンドが機能しました。ありがとう!
Sweet Chilly Philly

Mojaveを使用するOSXでは、次のように実行する必要がありましたsu - $USER -c 'xcode-select --install'
Belden

これも私にとってはうまくいきました。
不安症

11

cygwinを使用して次のコマンドを実行すると、同様の問題が発生しました。

$ gem install rerun

次のcygwinパッケージをインストールして解決しました。

  • ルビーデベル
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • 作る
  • automake1.15

このセグメンテーションフォールトは私にとって:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

rm -rf ~/.gem/コマンドを実行して再発行することで解決しました。
rr- 2016

ruby-devラズベリーパイ
CONvid19 2018年

11

ほとんどの投票ソリューションは私のマシンで動作しませんでした(linux mint 18.04)。注意深く調べたところ、g ++がないことがわかりました。で解決

sudo apt-get install g ++


1
これは私にとってUbuntu 18.04で機能しました。また、g ++インストールが機能する前に、sudo apt-get install makeを実行する必要がありました。
スコットリンドナー

Ubuntu 18.04での問題のインストールmakeg++修正も確認できます!
アルダ


5

Xcode 11 / macOSカタリナ

Xcode 11 / macOS Catalinaでは、ヘッダーファイルは古い場所になくなり、古い/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgファイルは使用できなくなりました。

代わりに、ヘッダーは/usr/include現在のSDKパスのディレクトリにインストールされます。

/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で見つけることができず、rubygemsが正しくインストールされるというエラーメッセージが表示されなくなりました。

非macOSプラットフォームへのビルドに関する注意

iOS / tvOS / watchOSなどの非macOSプラットフォームにビルドする場合、この変更はそれらのプラットフォームにmacOS SDKを含めようとするため、ビルドエラーが発生します。解決するには、CPATHログイン時に環境変数を設定しないか、次のxcodebuildように実行するときに一時的に空白に設定します。

CPATH="" xcodebuild --some-args

2
CPATHに関するドキュメントはありますか?設定しても問題は解決しません。最初にその値を確認したところ、未定義のように見えました。
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html-使用している言語/コンパイラによっては、異なる環境変数を見つける必要がある場合があります。デフォルトでは設定が解除されるのが普通です
アーロンブラジャー

また、他で見たことがない場合は、Xcodeのパス/名前にスペースを
含める

ここでのすべての答えから、これが私にとってうまくいった唯一の解決策です。私は上だMojave 10.14.6XCode 11.3.1。どうもありがとう、これを解決するのに1日かかりました:/
user2350644

4

Fedora 21以降では、ターミナルを開き、Ruby開発ファイルをrootとしてインストールするだけです。

dnf install ruby-devel

2

ruby-develのインストール後にgccのインストールが必要になる場合があります



1

Mac 10.14では、ヘッダーファイルが正しい場所にインストールされていないようです。他の修正のようにパスを変更するのではなく、これを実行することができました:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

指示に従ってください、それは私のためにこの問題を解決しました。


0

最小パッケージだけでなく、ruby全体をインストールする必要があります。使用する正しいコマンドは次のとおりです。

sudo apt install ruby-full

次のコマンドでも完全なルビはインストールされません。

sudo apt-get install ruby2.3-dev

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

すべてが働いた。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.