Json gem 'mkmf.rb yüklerken hata' ruby ​​'için başlık dosyalarını bulamıyor


407

Bağlam için, güvenlik duvarı olan uzak bir sunucuda. Ortamımı bir proxy üzerinden ayarlıyorum. Ben var ruby 1.8.7. Gem yüklemeye çalıştığımda ..

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

Aşağıdaki hatayı alıyorum:

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

Sorunun ne olduğundan emin olmadığım için, googled ve bunları buldum

İpucu var mı? Teşekkürler!


/usr/lib/ruby/ruby.hdosyanın varlığını kontrol et , eğer varsa, bize hata mesajını göster gem_make.out.
Малъ Скрылевъ

Yanıtlar:


785

Mimoralea tarafından belirtildiği gibi modern dönem güncellemesi :

Ruby 2.0 veya 2.2 kullanıyorsanız (teşekkürler @ patrick-davey).

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

veya genel yol:

sudo apt-get install ruby-dev

veya

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

Gönderdiğiniz ilk bağlantı tam olarak sizin durumunuz: kurulu bir yakut geliştirme ortamı yok. Çoğunlukla yazılan yakut uzantılarını derlemek için geliştirme envine ihtiyaç vardır C. Proxy'nin sorunla ilgisi yok: her şey iyi indirildi, sadece derleme başarısız.

Hedef makinenize ruby-dev( ruby-develrpm tabanlı dağıtımlar için) paket yüklemenizi öneririm .

gcc paket de gerekebilir.

Deneyin:

$ sudo apt-get install ruby-dev

Veya Redhat dağıtımı için:

$ sudo yum install ruby-devel

Veya [open] SuSE için:

$ sudo zypper install ruby-devel

2
Teşekkürler! Bu sorunun cevabı modüle özgü görünüyordu. ruby-devOnun yerine düşünüyorum ruby-devel. İşte tam olarak neye ihtiyacım olduğunu buldum - digitalocean.com/community/articles/…
Navneet

9
Ruby Devel'i (Fedora 20'de) kurduktan sonra *** extconf.rb başarısız oldu. Gcc'yi önerdiğiniz gibi yükledikten sonra, her şey iyi çalıştı.
Wayne Riesterer

sudo zypper install ruby-develOpenSUSE için ekleyebilirsiniz
superbob

Bu Ubuntu'da hiçbir şey yapmaz. Eksik paket ruby2.2-dev(veya yüklediğiniz sürüm).
Luís de Sousa

2
Hayır, bu cevap hiçbir şeyi çözmeye yardımcı olmadı. Doğru cevap mimoralea tarafından verilen cevaptır .
Luís de Sousa

177

İçin MacOS 10.14 tarihinde Xcode 11 , bu hatta Xcode yükleme ve komut satırı araçlarını yükleme ve lisans ile kabul ettikten sonra gerçekleşebilir

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

Sorun, Xcode 11'in ruby2.6 için başlıklar içeren, ancak macOS 10.14'ün ruby2.3'ü için olmayan macOS 10.15 SDK'sını göndermesidir. Çalıştırarak sorununun bu olduğunu doğrulayabilirsiniz.

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

XOS 11 ile macOS 10.14'te var olmayan yolu yazdırır

/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

Ancak, Xcode 11 içine bir macOS 10.14 SDK yükler /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Eski yanıt dosyalarını diğer yanıtlarda önerildiği gibi yükleyerek sistem dizinlerini kirletmek gerekli değildir. Bunun yerine, SDK seçildiğinde, uygun ruby2.3 başlıkları bulunacaktır:

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

Bu artık doğru şekilde yazdırılmalıdır

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

Aynı şekilde, gem installSDK seçiliyken de çalışmalıdır.

Geçerli Xcode SDK'sına geri dönmek için şunu kullanın:

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

14
Efsane. 10.14.6'daki sorunum tam olarak. Sad iki kere varamaz.
Diego Freniche

2
Siz, efendim, karanlık bir bilgi derebesisiniz. Çok teşekkürler,
Rubin Simons

Detaylı bilgi için teşekkürler! Sonunda çalıştı, "HATA: jekyll: jekyll-sass-dönüştürücü yüklenirken hata oluştu Ruby sürümü> = 2.4.0." Bu beni güldürüyor.
Nickolay Olshevsky

@NickolayOlshevsky bu durumda, şu anda 2.6.5 sürümünde rubeb'i homebrew üzerinden kurmanız gerekir.
joki

1
Sen kodlama efsanesini korkutuyorsun.
Aljosha Novakovic

75

Ruby 2.0 veya 2.2 (thanks @ patrick-davey) veya 2.3 (thanks @juanitofatas) kullanmanız durumunda.

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

Ve buradaki deseni elde edersiniz ...


6
Veya, 2.2 ... kullanıyorsanızsudo apt-get install ruby2.2-dev
patrickdavey

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

@ dson muhtemelen eski bir Ubuntu sürümü kullanıyorsunuz. Yükseltmeyi deneyin.
Pithikos

Aynı hatayı da aldım ve Linux Mint'in tamamen güncellenmiş bir sürümünü kullanıyorum. OS sürümünün sorun olduğunu sanmıyorum.
Andrew Faulkner

2
Trusty (14.04) gibi Ubuntu'nun eski bir sürümünü kullanıyorsanız Ruby için Brightbox PPA'sını ekleyin: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'te bunu elde edenler için, XCode yüklü olsa bile XCode komut satırı araçlarını yüklemek için aşağıdaki komutu çalıştırmanız gerekebilir:

sudo xcode-select --install

Ayrıca, aşağıdaki komutu çalıştırarak XCode'un hüküm ve koşullarını kabul etmelisiniz:

sudo xcodebuild -license

Bu benim için doğru cevaptı. Ruby Geliştirme Başlıkları yoktu. XCode'u yükledikten sonra çalışmayı denediğim orijinal komut çalıştı. Teşekkürler!
Tatlı Soğuk Philly

Mojave ile OSX üzerinde bunu çalıştırmak zorunda kaldı:su - $USER -c 'xcode-select --install'
Belden

Bu benim için de işe yaradı.
ergenler

11

Aşağıdaki komutu çalıştırmak için cygwin kullanarak benzer bir sorun vardı:

$ gem install rerun

Aşağıdaki cygwin paketlerini kurarak çözdüm:

  • yakut-devel
  • libffi-devel
  • gcc çekirdekli
  • gcc-g ++
  • Yapmak
  • automake1.15

Bu benim için segfaults:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

rm -rf ~/.gem/Komutu yaparak ve yeniden göndererek çözüldü .
rr-

ruby-devahududu pi üzerinde
CONvid19

11

En çok oy alan çözüm makinemde işe yaramadı (linux nane 18.04). Dikkatli bir bakıştan sonra, g ++ eksik olduğunu gördüm. İle çözüldü

sudo uygun-get install g ++


1
Bu benim için Ubuntu 18.04'te çalıştı. Ayrıca çalışmak için g ++ kurulumdan önce bir sudo apt-get install yapmak zorunda kaldı.
Scott Lindner

Yüklemeyi teyit edebilir makeve g++de Ubuntu 18.04 sabit sorunumu!
Arda

9

SUSE kullanmanız durumunda

sudo yast2 -i ruby-devel

2
Ben tercih ederim sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Catalina

Xcode 11 / macOS Catalina'da, üstbilgi dosyaları artık eski konumda değil ve eski /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgdosya artık kullanılamıyor.

Bunun yerine, başlıklar artık /usr/includegeçerli SDK yolunun dizinine yüklenir :

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

Bu dizinin çoğunu çıktısını kullanarak bulabilirsiniz xcrun --show-sdk-path. Bu yolu CPATHortam değişkenine eklerseniz , derleme komut dosyaları (üzerinden çağrılanlar da dahil olmak üzere bundle) genellikle bulabilir.

Kızkardeşimi ayarlayarak bu çözüme CPATHbenim de .zshrcdosyaya:

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

Yeni bir kabuk açtıktan (veya çalıştırdıktan sonra source .zshrc), artık mkmf.rb /usr/lib/ruby/ruby.h adresindeki ruby ​​için başlık dosyalarını bulamıyor ve rubygems düzgün bir şekilde yüklenemiyor.

MacOS Olmayan Platformlara Oluşturma Hakkında Not

İOS / tvOS / watchOS gibi macOS olmayan platformlar oluşturuyorsanız, bu değişiklik macOS SDK'yı bu platformlara dahil etmeye çalışarak derleme hatalarına neden olacaktır. Çözümlemek için, CPATHoturum açarken ortam değişkenini ayarlamayın veya şu şekilde çalışırken geçici olarak boş olarak ayarlayın xcodebuild:

CPATH="" xcodebuild --some-args

2
CPATH hakkında herhangi bir belgeniz var mı? Bunu ayarlamak benim için sorunu çözmüyor. Ben onun ilk etapta değeri kontrol zaman undefined ortaya çıktı.
Ilias Karim

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - kullandığınız dile / derleyiciye bağlı olarak farklı bir ortam değişkeni bulmanız gerekebilir. Varsayılan olarak ayarlanmaması normaldir
Aaron Brager

Ve başka bir yerde görmediyseniz, Xcode yolunda / adında boşluk olamaz
Feldur

Buradaki tüm cevaplardan, bu benim için işe yarayan tek çözüm. Ben duyuyorum Mojave 10.14.6ve XCode 11.3.1. Çok teşekkür ederim, bu sorunu çözmek için bana 1 gün sürdü: /
user2350644

4

Fedora 21 ve sonraki sürümlerde, bir terminal açmanız ve Ruby Development dosyalarını kök olarak yüklemeniz yeterlidir.

dnf install ruby-devel

2

Ruby-Devel'i kurduktan sonra gcc'yi kurmanız gerekebilir


1

Xcode -> Tercihler -> Konumlar

Komut Satırı Araçlarını Xcode 11.2.1 olarak değiştirin


1

Mac 10.14'te, başlık dosyaları doğru yere yüklenmemiş gibi görünüyor. Diğer düzeltmeler gibi yolları değiştirmek yerine, sadece bunu çalıştırmak mümkün:

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

Talimatları izleyin ve bu sorunu benim için çözdü.


0

Sadece minimum paketi değil, tüm rubyeyi de kurmanız gerekir. Kullanılacak doğru komut:

sudo apt install ruby-full

Aşağıdaki komut da tam bir yakut yüklemez:

sudo apt-get install ruby2.3-dev

0

Ubuntu 18 için, yükleme sırasında belirtilen günlük dosyasını kontrol ettikten sonra

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

ile

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

Bunun makebulunmadığını fark ettim . Böylece yüklü tarafından yapmak

sudo apt-get install make

her şey işe yaradı.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.