Kesalahan saat memasang json gem 'mkmf.rb tidak dapat menemukan file header untuk ruby'


407

Untuk konteks, itu pada server jauh yang memiliki firewall. Saya menyiapkan lingkungan saya melalui proxy. Saya punya ruby 1.8.7. Ketika saya mencoba menginstal permata ..

sudo gem install --http-proxy <host address>:<port> json

Saya mendapatkan kesalahan berikut:

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

Karena saya tidak yakin apa masalahnya, saya mencari di Google dan menemukan ini

Ada petunjuk? Terima kasih!


periksa presense /usr/lib/ruby/ruby.hfile, jika ada, tunjukkan kepada kami pesan kesalahan dari gem_make.out.
Малъ Скрылевъ

Jawaban:


786

Pembaruan era modern, sebagaimana dinyatakan oleh mimoralea :

Jika Anda menggunakan ruby ​​2.0 atau 2.2 (terima kasih @ patrick-davey).

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

atau, cara umum:

sudo apt-get install ruby-dev

atau

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

Tautan pertama yang Anda poskan persis dengan kasus Anda: tidak ada lingkungan pengembangan ruby ​​yang diinstal. Pengembangan diperlukan untuk mengkompilasi ekstensi ruby, yang sebagian besar ditulis dalam bahasa C. Proxy tidak ada hubungannya dengan masalah: semuanya diunduh dengan baik, hanya kompilasi yang gagal.

Saya akan menyarankan Anda untuk menginstal ruby-dev( ruby-develuntuk distro berbasis rpm) paket ke mesin target Anda.

gcc paket mungkin diperlukan juga.

Mencoba:

$ sudo apt-get install ruby-dev

Atau, untuk distro Redhat:

$ sudo yum install ruby-devel

Atau, untuk [open] SuSE:

$ sudo zypper install ruby-devel

2
Terima kasih! Maksud saya jawaban dalam pertanyaan itu tampaknya spesifik modul. Saya pikir bukan ruby-devitu ruby-devel. Di sinilah saya menemukan apa yang sebenarnya saya butuhkan - digitalocean.com/community/articles/…
Navneet

9
Setelah menginstal ruby-devel (pada Fedora 20), saya mendapat kesalahan *** extconf.rb gagal ***. Setelah menginstal gcc seperti yang Anda sarankan, semuanya bekerja dengan baik.
Wayne Riesterer

Anda dapat menambahkan sudo zypper install ruby-develuntuk openSUSE
superbob

Ini tidak melakukan apa pun di Ubuntu. Paket yang hilang adalah ruby2.2-dev(atau versi mana pun yang telah Anda instal).
Luís de Sousa

2
Tidak, jawaban ini tidak membantu memecahkan apa pun. Jawaban yang benar adalah jawaban mimoralea .
Luís de Sousa

178

Untuk Xcode 11 pada macOS 10.14 , ini dapat terjadi bahkan setelah menginstal Xcode dan menginstal alat baris perintah dan menerima lisensi dengan

sudo xcode-select --install
sudo xcodebuild -license accept

Masalahnya adalah bahwa Xcode 11 mengirimkan macOS 10.15 SDK yang mencakup header untuk ruby2.6, tetapi tidak untuk ruby2.3 macOS 10.14. Anda dapat memverifikasi bahwa ini adalah masalah Anda dengan menjalankan

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

yang pada MacOS 10.14 dengan Xcode 11 cetakan yang tidak ada jalan

/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

Namun, Xcode 11 menginstal macOS 10.14 SDK di dalamnya /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Tidak perlu mencemari direktori sistem dengan menginstal file header lama seperti yang disarankan dalam jawaban lain. Sebagai gantinya, dengan memilih SDK itu, header ruby2.3 yang sesuai akan ditemukan:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Ini sekarang harus dicetak dengan benar

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Demikian juga, gem installharus berfungsi saat SDK dipilih.

Untuk beralih kembali ke Xcode SDK saat ini, gunakan

sudo xcode-select --switch /Applications/Xcode.app

14
Legenda. Persis masalah saya di 10.14.6. Sedih tidak dapat dihapuskan dua kali.
Diego Freniche

2
Anda, tuan, adalah tuan pengetahuan yang tidak jelas. Terima kasih banyak,
Rubin Simons

Terima kasih atas informasi terperinci! Akhirnya berhasil, menghasilkan "ERROR: Kesalahan menginstal jekyll: jekyll-sass-converter memerlukan versi Ruby> = 2.4.0.". Itu membuatku tertawa.
Nickolay Olshevsky

@NickolayOlshevsky dalam hal ini, Anda perlu menginstal ruby ​​via homebrew, saat ini di versi 2.6.5.
joki

1
Kau legenda pengodean freakin.
Aljosha Novakovic

75

Jika Anda menggunakan ruby ​​2.0 atau 2.2 (thanks @ patrick-davey) atau 2.3 (thanks @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

Dan Anda mendapatkan polanya di sini ...


6
Atau, jika Anda menggunakan 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

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

@dson mungkin Anda menggunakan versi Ubuntu yang lama. Coba tingkatkan.
Pithikos

Saya mendapat kesalahan yang sama juga, dan saya menggunakan versi Linux Mint yang sepenuhnya diperbarui. Saya tidak berpikir OS verison adalah masalahnya.
Andrew Faulkner

2
Jika Anda menggunakan versi lama Ubuntu seperti Trusty (14.04), tambahkan PPA brightbox untuk Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

Bagi mereka yang mendapatkan ini di Mac OS X Anda mungkin perlu menjalankan perintah berikut untuk menginstal alat baris perintah XCode, bahkan jika Anda sudah menginstal XCode:

sudo xcode-select --install

Anda juga harus menyetujui syarat dan ketentuan XCode dengan menjalankan perintah berikut:

sudo xcodebuild -license

Ini jawaban yang tepat untukku. Saya tidak punya Header Pengembangan Ruby. Setelah saya menginstal xCode, perintah asli yang saya coba jalankan berfungsi. Terima kasih!
Sweet Chilly Philly

Pada OSX dengan Mojave saya harus menjalankan itu sebagai:su - $USER -c 'xcode-select --install'
Belden

Ini juga berhasil bagi saya.
adougies

11

Saya punya masalah serupa menggunakan cygwin untuk menjalankan perintah berikut:

$ gem install rerun

Saya menyelesaikannya dengan menginstal paket cygwin berikut:

  • ruby-devel
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • membuat
  • automake1.15

/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
Segfault

Dipecahkan dengan melakukan rm -rf ~/.gem/dan menerbitkan kembali perintah.
rr-

ruby-devpada raspberry pi
CONvid19

11

Sebagian besar solusi yang dipilih tidak berfungsi pada mesin saya (linux mint 18.04). Setelah melihat dengan cermat, saya menemukan bahwa g ++ hilang. Dipecahkan dengan

sudo apt-get install g ++


1
Ini bekerja untuk saya di Ubuntu 18.04. Saya juga harus melakukan make sudo apt-get install sebelum g ++ install bekerja.
Scott Lindner

Dapat mengkonfirmasi menginstal makedan g++memperbaiki masalah saya di Ubuntu 18.04 juga!
Arda

9

jika Anda menggunakan SUSE

sudo yast2 -i ruby-devel

2
Saya lebih suka sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Catalina

Pada Xcode 11 / macOS Catalina, file header tidak lagi berada di lokasi lama dan /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgfile lama tidak lagi tersedia.

Sebagai gantinya, tajuk sekarang diinstal ke /usr/includedirektori jalur SDK saat ini:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

Sebagian besar direktori ini dapat ditemukan dengan menggunakan output dari xcrun --show-sdk-path. Dan jika Anda menambahkan jalur ini ke CPATHvariabel lingkungan, lalu buat skrip (termasuk yang dipanggil via bundle) umumnya akan dapat menemukannya.

Saya menyelesaikan ini dengan mengatur file CPATHsaya di saya .zshrc:

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

Setelah membuka shell baru (atau berjalan source .zshrc), saya tidak lagi menerima pesan kesalahan mkmf.rb tidak dapat menemukan file header untuk ruby ​​di /usr/lib/ruby/ruby.h dan rubygem diinstal dengan benar.

Catatan tentang Bangunan ke Platform Non-macOS

Jika Anda membangun untuk platform non-macOS, seperti iOS / tvOS / watchOS, perubahan ini akan mencoba untuk memasukkan macOS SDK di platform tersebut, menyebabkan kesalahan pembangunan. Untuk mengatasinya, jangan atur CPATHvariabel lingkungan saat login, atau atur sementara untuk kosong saat dijalankan xcodebuildseperti:

CPATH="" xcodebuild --some-args

2
Apakah Anda memiliki dokumentasi tentang CPATH? Pengaturan itu tidak menyelesaikan masalah bagi saya. Ketika saya memeriksa nilainya di tempat pertama itu tampak tidak terdefinisi.
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - Anda mungkin perlu menemukan variabel lingkungan yang berbeda tergantung pada bahasa / kompiler yang Anda gunakan. Wajar jika tidak disetel secara default
Aaron Brager

Dan, jika Anda belum melihatnya di tempat lain, tidak mungkin ada spasi di jalur / nama Xcode
Feldur

Dari semua jawaban di sini, ini satu-satunya solusi yang bekerja untuk saya. Saya aktif Mojave 10.14.6dan XCode 11.3.1. Terima kasih banyak, butuh waktu 1 hari untuk menyelesaikan ini: /
user2350644

4

Di Fedora 21 ke atas, Anda cukup membuka terminal dan menginstal file Pengembangan Ruby sebagai root.

dnf install ruby-devel

2

Anda mungkin perlu menginstal gcc setelah menginstal ruby-devel



1

Pada Mac 10.14, file header sepertinya tidak diinstal di tempat yang benar. Daripada mengubah jalur seperti perbaikan lainnya, saya bisa menjalankan ini:

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

Ikuti instruksi dan ini menyelesaikan masalah saya.


0

Anda perlu menginstal seluruh ruby ​​dan bukan hanya paket minimum. Perintah yang benar untuk digunakan adalah:

sudo apt install ruby-full

Perintah berikut juga tidak akan menginstal ruby ​​lengkap:

sudo apt-get install ruby2.3-dev

0

Untuk Ubuntu 18, setelah memeriksa file log disebutkan saat menginstal

Hasil masuk ke /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

dengan

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

Saya perhatikan bahwa maketidak ditemukan. Jadi instal make by

sudo apt-get install make

semuanya bekerja.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.