Instalasi Nokogiri gagal -libxml2 tidak ada

156

Saya selalu mengatasi masalah instalasi Nokogiri dengan mengikuti dokumentasi di tutorial " Instalasi Nokogiri ".

Tapi kali ini, bahkan setelah menginstal semua dependensi, Nokogiri belum diinstal. Saya mendapatkan kesalahan berikut:

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

Saya mencoba menginstalnya dengan menentukan direktori libxml2 dan libxslt:

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

tapi itu mengembalikan kesalahan yang sama.

Saya mengikuti semua artikel Stack Overflow terkait lainnya dan tidak ada yang membantu. Adakah yang punya solusi?

Rohit A.
sumber
1
Apa sistem operasi Anda?
Jake Jones
2
Ini adalah jawaban yang lebih tepat - sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Jawaban:

163

Pertama, instal dependensi:

sudo apt-get install libxslt-dev libxml2-dev

Jika Anda masih menerima kesalahan, Anda mungkin kehilangan rantai alat penyusun:

sudo apt-get install build-essential

Anda akan mendapatkan kesalahan "libxml2 is missing" jika Anda melewatkan build toolchain (setidaknya saya mengalami masalah ini pada Debian Lenny).

Nokogiri build test-compile file header libxml2 untuk memverifikasi bahwa file tersebut ada, namun, tidak membedakan antara "libxml2 hilang" dan "kompiler untuk menguji libxml2 hilang".

Erik Peterson
sumber
44
Jika bukan itu masalahnya, Anda mungkin perlu menginstal libxml2-dev
Erik Peterson
1
saya telah menjalankan perintah di atas dan mendapatkan kesalahan 'libxml2 hilang'. dapatkah Anda ceritakan lebih lanjut tentang pemasangan rantai alat bangun. karena saya tidak menemukan banyak bantuan untuk itu.
Rohit A.
1
Saya mendapat pesan itu karena saya tidak menginstal gcc (atau kompiler lain). Saya tidak memiliki alat rantai penyusun.
Erik Peterson
7
Jika Anda menggunakan mac: brew install libxslt lalu brew install libxml2
Sam Backus
245

Anda mungkin perlu menginstal kedua paket ini

sudo apt-get install libxslt-dev libxml2-dev
Ryan
sumber
7
Bagaimana komentar menilai ini sangat duduk di bawah jawaban yang diterima?
New Alexandria
3
Karena pertanyaannya menyatakan "bahkan setelah menginstal semua dependensi". Jadi jawaban yang diterima adalah yang benar.
b0fh
62

Di Mac OS X (Mavericks), menginstal perpustakaan dengan brewdan pengaturan NOKOGIRI_USE_SYSTEM_LIBRARIES=1sebelum menginstal permata melakukan trik untuk saya.

Meringkas:

  • Jika sebelumnya diinstal, hapus instalan permata:

    gem uninstall nokogiri
  • Gunakan Homebrew untuk menginstal libxml2, libxsltdan libiconv:

    brew install libxml2 libxslt libiconv
  • Instal permata yang menentukan jalur ke perpustakaan untuk dihubungkan dengan:

    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"
Eduardo
sumber
Saya mendapat beberapa kesalahan tentang libiconv: "Apple mendistribusikan libiconv dengan OS X, Anda dapat menemukannya di / usr / lib." Tapi cukup menyalin skrip instal gem Anda berhasil :) Terima kasih!
Automatico
Terima kasih! setelah seluruh pagi mencoba untuk menginstal nokogiri, jawaban Anda (khususnya dengan jalur konfigurasi) akhirnya berhasil - daripada menginstal yang menyatakan (agak tidak membantu) bahwa libxml2 tidak ada, bahkan ketika jalur sudah benar.
Pebbl
2
Menggunakan port alih-alih menyeduh pada OS X dan hanya akan $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirimelakukan trik
Andres Kütt
2
Di OSX El Capitan 10.11.2, saya harus menggunakannya brew install libxml2 libxslt homebrew/dupes/libiconvagar berfungsi
Hai Feng Kao
2
Selain itu, saya perlu menambahkan --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"untuk gem install nokogiriperintah untuk bekerja. Otherwse, itu akan ditampilkan libxml2 version 2.6.21 or later is required!(versi libxml2 saya adalah 2.9.2)
Hai Feng Kao
22

Saya baru saja mengalami masalah yang sama pada Fedora 13. Setelah melakukan pencarian yang membuat frustrasi dan tidak berhasil

gem install nokogiri

bekerja untuk saya, saya bisa menginstalnya dan menyiasati kesalahan libxml2 via yum.

Cukup instal permata melalui yumalih-alih gemperintah:

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

Ini membantu saya menemukan jawaban yang tepat untuk Fedora dan, karena saya menggunakan RVM untuk manajemen paket Ruby,

yum install rubygem-nokogiri

akan menarik semua permata Ruby dan dependensi ke dalam sistem, bukan ke lingkungan RVM saya, dan dalam pengalaman saya yang mengarah pada pengalaman yang sangat membuat frustrasi dan rendah hati.

Jadi, mengambil permata Nokogiri yum yang bisa Anda gunakan:

yum provides  rubygem-nokogiri

dan dapatkan daftar dependensi untuk rubygem-Nokogiri yang menunjukkan kepada saya perpustakaan yang hilang. Setelah itu saya berlari:

yum install libxml2-devel libxslt libxslt-devel

Sekarang Nokogiri mengkompilasi di Fedora dan Nokogiri menginstal. Doh !, kita perlu header untuk mengkompilasi Nokogiri dari perpustakaan devel.

Sojoodi
sumber
Ini berhasil bagi saya, meskipun di ubuntu saya harus menggunakan apt-get install libnokogiri-ruby1.9.1 , kemudian edit Gemfile untuk meminta nokogiri 1.5.5 dan bukan 1.5.9
ffflabs
13

Di Mac OS X (Mavericks) jika tidak ada solusi ini yang berfungsi, coba:

ARCHFLAGS="-arch x86_64" gem install nokogiri

atau

ARCHFLAGS="-arch i386" gem install nokogiri

tergantung pada arsitektur sistem Anda.

rilla
sumber
13

Anda biasanya memerlukan file pengembangan untuk membangun permata. Mencoba:

sudo apt-get install libxslt-dev libxml2-dev

(Saya baru saja melihat bahwa Eric menyarankan hal yang sama dalam komentar.)

pduersteler
sumber
11

Saya dapat menginstal ini dengan Chocolatey , Windows 8.1 x64, dan DevKit x64.

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

Anda harus memverifikasi nomor versi di jalur yang benar.

Anda mungkin perlu menambahkan repositori NuGet Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
Chloe
sumber
Saya mendapatkan 'Tidak dapat menemukan paket libxml2'. Sumber apa yang Anda miliki di Cokelat?
Isaac Waller
3
Menemukan masalahnya! Sumber nuget dimatikan dalam file sumber Chocolatey! Tetapi permata tidak bekerja: [tid-1789500] 126: Modul yang ditentukan tidak dapat ditemukan. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric
@RatkoStibric Saya pikir Anda harus membangun dengan libs dinamis: ...\x64\Release\dynamic\cdecl.
Chloe
1
Setelah cokelat diinstal, tambahkan sumber menggunakan perintah berikut:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck
1
Terima kasih untuk Chocolatey, tidak pernah tahu tentang itu sebelumnya!
Richard Peck 15
11

Boleh jadi:

sudo yum install -y libxml2 libxml2-devel

di server RHEL.

hohner
sumber
6

Di macOS tidak ada di atas / di bawah ini yang benar-benar bekerja untuk saya sampai saya secara eksplisit menyediakan jalur XCode libxml2 ke --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
sobstel
sumber
4

Saya dapat menginstal Nokogiri 1.6.5 di Fedora 20 dengan melakukan:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Kemudian jalankan:

gem install nokogiri
Simone
sumber
4

Untuk orang lain yang mengalami masalah ini, saya menyelesaikannya dengan menjalankan perintah ini dalam direktori proyek

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

Pembaruan: Saya mengalami ini lagi dan mencoba memperbarui permata yang berfungsi untuk saya ...

gem update nokogiri

Jbur43
sumber
2

Sudahkah Anda mencoba menginstal libxml2? Bukan dari rubygems, tetapi melalui proses instalasi standar untuk sistem operasi Anda. Di Ubuntu / Debian misalnya:

sudo apt-get install libxml2

Pada versi OS X terbaru apa pun seharusnya sudah diinstal.

d11wtq
sumber
Saya di ubuntu dan saya telah mengikuti semua instalasi di atas seperti yang diceritakan dalam pertanyaan stackoverflow lainnya.
Rohit A.
1

Untuk pengguna OSX, jika Anda pernah berhasil menginstal Nokogiri sebelumnya, namun mendapatkan kesalahan saat menginstalnya, katakanlah, menggunakan versi baru Ruby yang telah Anda tambahkan dan kesalahan yang menyertakan pesan seperti:

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

Ini bisa menjadi indikasi peningkatan XCode yang terjadi melalui App Store, baik secara manual atau otomatis, dan Anda belum membukanya sejak saat itu.

Jika demikian, Anda harus dapat membuka XCode, menyetujui lisensi baru, dan kemudian menginstal Nokogiri dengan sukses.

Paul Fioravanti
sumber
1

Di Mac OS X Yosemite kesalahan saya adalah saya mencoba menggunakan sudo gem installketika itu adalah aturan praktis untuk tidak menggunakan hak superuser saat memasang permata.

Dalam kasus saya itu mencoba memodifikasi instalasi sistem Ruby, dan itu bukan ide yang baik. Saya menginstal rbenv, menginstal Ruby 2.2.2 melalui dan menetapkannya global, yang merupakan istilah dari dokumentasi rbenv. Setelah itu Nokogiri bisa menginstal sendiri dengan sederhana

gem install nokogiri

Tidak ada peretasan atau penyelesaian yang diperlukan, hanya lingkungan yang diatur dengan benar; Nokogiri melakukan sisanya dengan sempurna.

Aleks N.
sumber
Menggunakan sudotidak masalah JIKA Anda memahami cara kerjanya, di mana ia akan berlaku, mengapa file yang diinstal atau diperbarui harus diinstal dan cara membatalkan tindakan jika gagal. Kalau tidak, menggunakan kotak pasir seperti rbenv atau RVM adalah ide yang BENAR - BENAR bagus.
the Tin Man
1

Mampu menginstal vagrant-awe dengan mengikuti posting di atas tetapi menggunakan perintah sebagai berikut:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
Romi
sumber
0

Saya dapat menginstal Nokogiri dengan menjalankan paket-paket berikut:

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

=== TLDR ===

Seperti yang dinyatakan dalam instruksi , bangun Ruby dengan kompiler dentang terbaru, atau setidaknya versi yang sama dengan yang digunakan Rubygems untuk mengkompilasi libxml dan libxsl ekstensi asli Nokogiri.

Jika menggunakan RVM, membangun dari sumber dengan --with-ggc=clangbendera adalah apa yang dilakukan untuk saya:

rvm install 2.2 --with-gcc=clang

Ganti 2.2dengan versi apa pun yang Anda inginkan. --with-gcc=clangmemastikan RVM membangun dari sumber dan menggunakan dentang untuk melakukannya; jika tidak, RVM mungkin binary Ruby yang sudah dibuat sebelumnya, yang membuat saya tersandung.

Kemudian, instal Nokogiri seperti biasa menggunakan Bundler atau Rubygems.

=== DALAM KEDALAMAN ===

Saya berjuang dengan ini untuk sementara waktu. gem install nokogirimemberi saya:

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

Menggali mkmf.logsaya melihat:

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

Nokogiri memasok libxml dan libxsl sendiri (pada 1.6.4). Tanda tangan yang didefinisikan dalam salinan parser.h lokal Nokogiri (ditemukan di bawah direktori install permata) adalah:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Jadi saya bingung bagaimana metode panggilan dalam penggunaan file conftest.c yang tertutup rapat tidak bisa cocok dengan file header untuk parser.h.

Ketika saya menyadari bahwa saya mungkin telah menginstal Ruby biner, saya menghapus dan menginstal ulang menggunakan --with-gcc=clang(untuk memaksa kompilasi dan menggunakan dentang) dan masalahnya terpecahkan:

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

Saya tidak yakin mengapa itu bekerja karena header sistem libxml /usr/include/libxml2/libxml/parser.hmemiliki tanda tangan yang sama dengan salinan lokal Nokogiri.

Aneh, tapi berhasil. Pastikan Anda mengkompilasi Ruby dengan dentang.

Johnster
sumber
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

Ubah versimu dengan itu.

Liber
sumber