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!

Navneet
sumber
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
Aleksei Matiushkin
sumber
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
joki
sumber
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 ...

mimoralea
sumber
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
22

Saya juga mengalami masalah ini karena saya menginstal Ruby di Ubuntu melalui brightbox , dan saya pikir ruby-dev adalah trunk of ruby. Jadi saya tidak menginstal. Instal perbaikan ruby2.3-dev:

sudo apt-get install ruby2.3-dev
Juanito Fatas
sumber
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
Juan De León
sumber
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
Kinifwyne
sumber
/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 ++

Miles Davis
sumber
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
Prokur
sumber
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
Aaron Brager
sumber
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
emmojo
sumber
2

Anda mungkin perlu menginstal gcc setelah menginstal ruby-devel

bott
sumber
1

Xcode -> Preferensi -> Lokasi

ubah Alat Baris Perintah ke Xcode 11.2.1

Chester Fang
sumber
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.

Shawn Lauzon
sumber
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
aleksander_si
sumber
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.

Gökçer Gökdal
sumber
-2
sudo apt-get --reinstall install ruby

coba untuk ubuntu 16.04

Ajmal Aamir
sumber