Nokogiri yüklemesi başarısız -libxml2 eksik


156

Her zaman " Nokogiri'yi Kurmak " eğitimindeki belgeleri takip ederek Nokogiri kurulum konularında çalıştım .

Ancak bu sefer, tüm bağımlılıkları kurduktan sonra bile Nokogiri kurulmadı. Aşağıdaki hatayı alıyorum:

libxml2 is missing.  please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

Ben libxml2 ve libxslt dizinleri belirterek yüklemeyi denedim:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

ama aynı hatayı döndürdü.

Diğer tüm Stack Overflow makalelerini takip ettim ve hiçbiri yardımcı olmadı. Herkesin bir çözümü var mı?


1
İşletim sisteminiz nedir?
Jake Jones

2
Bu daha uygun cevap sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Yanıtlar:


163

İlk olarak, bağımlılıkları yükleyin:

sudo apt-get install libxslt-dev libxml2-dev

Hatayı hala alıyorsanız, bir derleyici araç zincirini kaçırıyor olabilirsiniz:

sudo apt-get install build-essential

Bir yapı araç zincirini kaçırırsanız "libxml2 eksik" hatasını alırsınız (en azından Debian Lenny'de bu sorunla karşılaştım).

Nokogiri derlemesi, var olduğunu doğrulamak için bir libxml2 üstbilgi dosyasını derler, ancak "libxml2 eksik" ve "libxml2'yi test etmek için bir derleyici" arasında ayrım yapmaz.


44
Sorun bu değilse, libxml2-dev kurmanız gerekebilir
Erik Peterson

1
i yukarıdaki komutu çalıştırın ve 'libxml2 eksik' hatası var. bana yapı aracı zinciri kurulumu hakkında daha fazla bilgi verebilir misiniz? b'cos i üzerinde fazla yardım bulamadık.
Rohit A.

1
Bu mesajı aldım çünkü gcc (veya başka bir derleyici) yüklü değildi. Derleyici araç zincirim yoktu.
Erik Peterson

7
Mac kullanıyorsanız: brew install libxslt sonra brew install libxml2
Sam Backus

245

Aslında bu paketlerin her ikisini de yüklemeniz gerekebilir

sudo apt-get install libxslt-dev libxml2-dev

7
Bunu derecelendiren bir yorum, kabul edilen cevabın altında nasıl oturabilir?
Yeni İskenderiye

3
Çünkü soru "tüm bağımlılıkları kurduktan sonra bile" ifadesini kullandı. Yani kabul edilen cevap doğru cevaptır.
b0fh

62

Mac OS X'te (Mavericks), kütüphaneleri yüklemek ve gem'i yüklemeden önce brewayarlamak NOKOGIRI_USE_SYSTEM_LIBRARIES=1benim için hile yaptı.

Özetleme:

  • Önceden yüklenmişse, taşı kaldırın:

    gem uninstall nokogiri
  • Yüklemek için Homebrew kullanın libxml2, libxsltve libiconv:

    brew install libxml2 libxslt libiconv
  • Bağlanacak kitaplıkların yollarını belirterek gem'i yükleyin:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"

Libiconv ile ilgili bazı hatalar aldım: "Apple libiconv'u OS X ile dağıtıyor, / usr / lib'de bulabilirsiniz." Ama sadece gem kurulum betiğini kopyalamak çalıştı :) Teşekkürler!
Automatico

Teşekkür ederim! nokogiri'yi kurmaya çalışırken bütün bir sabah sonra, cevabınız (özellikle yapılandırma yollarıyla) nihayet işe yaradı - kurulumlar, libxml2'nin yollar doğru olsa bile var olmadığını (oldukça yararsız bir şekilde) belirtmek yerine.
Pebbl

2
OS X'de demlemek yerine portu kullanmak ve sadece $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirihile yapmak
Andres Kütt

2
OSX El Capitan 10.11.2'de brew install libxml2 libxslt homebrew/dupes/libiconvçalışmak için kullanmalıyım
Hai Feng Kao

2
Ayrıca, ben eklemeniz gerekir --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"için gem install nokogiriçalışmalara komuta. Otherwse, gösterecektir libxml2 version 2.6.21 or later is required!(benim libxml2 versiyonum 2.9.2)
Hai Feng Kao

22

Fedora 13'te de aynı sorunu yaşadım. Sinir bozucu ve başarısız bir arama yaptıktan sonra

gem install nokogiri

benim için çalışmak, yüklemek ve libxml2 hatası üzerinden almak mümkün yum.

Gem'i komut yumyerine kullanarak yüklemeniz yeterlidir gem:

su
yum search rubygem-nokogiri   #this find the proper package name
yum install rubygem-nokogiri.i686

Bu Fedora için doğru cevabı bulmama yardımcı oldu ve Ruby paket yönetimi için RVM kullandığım için,

yum install rubygem-nokogiri

tüm Ruby mücevherlerini ve bağımlılıklarını RVM ortamımın içine değil, sisteme ve çok sinir bozucu ve alçakgönüllü bir deneyime yol açacak.

Yani, kullanabileceğiniz Nokogiri yum gemini bularak:

yum provides  rubygem-nokogiri

ve eksik olan kütüphaneleri gösteren rubygem-Nokogiri bağımlılıklarının bir listesini alın. Ondan sonra koştum:

yum install libxml2-devel libxslt libxslt-devel

Şimdi Nokogiri Fedora ve Nokogiri kurulumlarında derleniyor. D'oh !, Devog kütüphanelerinden Nokogiri'yi derlemek için başlıklara ihtiyacımız var.


Her ne kadar ubuntu'da apt-get install libnokogiri-ruby1.9.1 kullanmak zorunda kaldım , sonra Gemfile'i 1.5.9 yerine
nokogiri

13

Mac OS X'te (Mavericks) bu çözümlerden hiçbiri işe yaramıyorsa şunu deneyin:

ARCHFLAGS="-arch x86_64" gem install nokogiri

veya

ARCHFLAGS="-arch i386" gem install nokogiri

sisteminizin mimarisine bağlı olarak.


13

Taş oluşturmak için genellikle geliştirme dosyalarına ihtiyacınız vardır. Deneyin:

sudo apt-get install libxslt-dev libxml2-dev

(Eric'in bir yorumda aynı şeyi önerdiğini gördüm.)


11

Bunu Chocolatey , Windows 8.1 x64 ve DevKit x64 ile yükleyebildim.

cinst libxml2
cinst libxslt
cinst libiconv

gem install nokogiri -- 
  --with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include 
  --with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include 
  --with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include 
  --with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic

Yollardaki sürüm numarasının doğru olduğunu doğrulamanız gerekir.

Microsoft'un NuGet deposunu eklemeniz gerekebilir:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"

'Libxml2 paketi bulunamadı' mesajı alıyorum. Chocolately'da hangi kaynaklarınız var?
Isaac Waller

3
Sorunu buldum! Chocolatey'in kaynaklar dosyasında Nuget kaynakları devre dışı bırakıldı! Ancak değerli taş çalışmıyor: [tid-1789500] 126: Belirtilen modül bulunamadı. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric

@RatkoStibric Sana dinamik kütüphaneleri ile yapı gerektiğini düşünüyorum: ...\x64\Release\dynamic\cdecl.
Chloe

1
Çikolata kurulduktan sonra, aşağıdaki komutu kullanarak bir kaynak ekleyin:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck

1
Chocolatey için teşekkürler, bunu daha önce hiç bilmiyordum!
Richard Peck

11

Olacak:

sudo yum install -y libxml2 libxml2-devel

RHEL sunucularında.


6

MacOS'ta, XCode libxml2 yolunu açıkça sağlayana kadar yukarıdaki / aşağıda hiçbiri gerçekten benim için çalışmadı --with-xml2-include.

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries

4

Nokogiri 1.6.5'i Fedora 20 üzerine şunları yaparak yükleyebildim:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Sonra çalışıyor:

gem install nokogiri

4

Bu sorunu yaşayan herkes için, bu komutu proje dizininde çalıştırarak çözdüm

gem install nokogiri -- --use-system-libraries

Güncelleme: Ben tekrar bu koştu ve sadece benim için çalışan mücevher güncelleme çalıştı ...

gem update nokogiri


2

Libxml2'yi yüklemeyi denediniz mi? Rubygems'ten değil, işletim sisteminiz için standart kurulum işlemiyle. Ubuntu / Debian'da örneğin:

sudo apt-get install libxml2

OS X'in son sürümlerinde zaten kurulu olmalıdır.


Ben ubuntu üzerinde ve diğer stackoverflow soruları söylediğim gibi yukarıdaki tüm yüklemeleri izledim.
Rohit A.

1

OSX kullanıcıları için, daha önce Nokogiri'yi yüklemede başarılı olduysanız, ancak eklediğiniz Ruby'nin yeni bir sürümünü kullanarak ve aşağıdaki gibi bir iletiyi içeren hatayı kullanarak yüklerken hata alıyorsanız :

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

Bu, bir XCode yükseltmesinin manuel veya otomatik olarak App Store üzerinden gerçekleştiğini ve o zamandan beri açmamış olduğunuzu gösterebilir.

Öyleyse, XCode'u açabilmeniz, yeni lisansı kabul edebilmeniz ve ardından Nokogiri'yi başarıyla yüklemeniz gerekir.


1

Mac OS X Yosemite'de benim hatam, kullanmaya çalışmamdı sudo gem install taşlar yüklerken süper kullanıcı ayrıcalıklarını kullanmamak için bir kural olduğunda kullanmaya çalışmamdı.

Benim durumumda Ruby'nin sistem kurulumunu değiştirmeye çalıştı ve bu iyi bir fikir değil. Rbenv'i kurdum, Ruby 2.2.2'yi yükledim ve globalrbenv'in belgelerinden bir terim olarak ayarladım. Bundan sonra Nokogiri kendini basit bir

gem install nokogiri

Hiçbir korsan veya geçici çözüm gerekli değildi, sadece düzgün ayarlanmış bir ortam vardı; Nokogiri gerisini mükemmel yapıyor.


Kullanılması sudoTamam EĞER bunu dosyaların yüklü veya yüklü olmalıdır güncel ve nasıl olması neden başarısız olursa eylemi geri almak için, etkili olması için gidiyor nereye, nasıl çalıştığını anlamak. Aksi takdirde, rbenv veya RVM gibi bir sanal alan kullanmak GERÇEKTEN iyi bir fikirdir.
Tin Man

1

Yukarıdaki yazıyı uygulayarak ancak aşağıdaki komutu kullanarak vagrant-awe'yi yükleyebildim:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

Nokogiri'yi aşağıdaki paketleri çalıştırarak yükleyebildim:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch

0

=== TLDR ===

Talimatların belirttiği gibi , Ruby'yi en son clang derleyicisiyle veya en azından Nokogiri'nin yerel uzantıları libxml ve libxsl'i derlemek için kullanacağı sürümle oluşturun.

RVM kullanıyorsanız, --with-ggc=clangbayrakla kaynaktan kaynak oluşturmak benim için ne yaptı:

rvm install 2.2 --with-gcc=clang

2.2İstediğiniz sürümle değiştirin . --with-gcc=clangRVM'nin kaynaktan oluşturulmasını sağlar ve bunu yapmak için clang kullanır; aksi takdirde RVM önceden kurulmuş bir ikili Ruby olabilir, bu da beni harekete geçirdi.

Ardından, Bundler veya Rubygems kullanarak Nokogiri'yi normal şekilde yükleyin.

=== DERİNLİKTE ===

Bir süre bununla mücadele ettim. gem install nokogiribana verdi:

checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no

Kazdık mkmf.loggördüm:

conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }  

Nokogiri kendi libxml ve libxsl'ini sağlar (1.6.4 itibariyle). Nokogiri'nin yerel parser.h kopyasında (gem kurulum dizininin altında bulunur) tanımlanan imza:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Hermetically mühürlü conftest.c dosya kullanımında yöntem çağrısı parser.h başlık dosyası ile eşleşemedi ne kadar kaybı oldu.

Muhtemelen bir ikili Ruby kurduğumu fark ettiğimde --with-gcc=clang(derlemeyi zorlamak ve clang kullanmak için) kullanarak yeniden yükledim ve sorun çözüldü:

rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri

Neden sistem libxml üstbilgisi /usr/include/libxml2/libxml/parser.hNokogiri yerel kopyayla aynı imzası olarak çalıştığını tam olarak emin değilim .

Tuhaf, ama işe yaradı. Bir Ruby'yi clang ile derlediğinizden emin olun.


0
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

Sürümünüzü değiştirin.

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.