Installazione di Nokogiri non riuscita -libxml2 mancante


156

Ho sempre lavorato per risolvere i problemi di installazione di Nokogiri seguendo la documentazione del tutorial " Installazione di Nokogiri ".

Ma questa volta, anche dopo aver installato tutte le dipendenze, Nokogiri non è stato installato. Ottengo il seguente errore:

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

Ho provato a installarlo specificando le directory libxml2 e libxslt:

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

ma ha restituito lo stesso errore.

Ho seguito tutti gli altri articoli Stack Overflow correlati e nessuno mi ha aiutato. Qualcuno ha una soluzione?


1
Qual è il tuo sistema operativo?
Jake Jones,

2
Questa è la risposta più adatta: sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra,

Risposte:


163

Innanzitutto, installa le dipendenze:

sudo apt-get install libxslt-dev libxml2-dev

Se l'errore persiste, è possibile che manchi una toolchain del compilatore:

sudo apt-get install build-essential

Otterrai l'errore "Libxml2 mancante" se ti manca un toolchain di build (almeno mi sono imbattuto in questo problema su Debian Lenny).

La build di Nokogiri test-compila un file di intestazione libxml2 per verificare che sia presente, tuttavia, non fa distinzione tra "manca libxml2" e "manca un compilatore per testare libxml2".


44
In caso contrario, potrebbe essere necessario installare libxml2-dev
Erik Peterson,

1
ho eseguito il comando sopra e ho ricevuto l'errore 'libxml2 mancante'. puoi dirmi di più sull'installazione della catena di strumenti di costruzione. b'cos non ho trovato molto aiuto.
Rohit A.

1
Ho ricevuto quel messaggio perché non avevo installato gcc (o nessun altro compilatore). Non avevo una toolchain di compilatore.
Erik Peterson,

7
Se sei su un Mac: brew install libxslt quindi brew install libxml2
Sam Backus

245

Potrebbe essere necessario installare entrambi questi pacchetti

sudo apt-get install libxslt-dev libxml2-dev

7
In che modo un commento può essere valutato al di sotto di una risposta accettata?
Nuova Alessandria,

3
Perché la domanda affermava "anche dopo aver installato tutte le dipendenze". Quindi la risposta accettata è quella corretta.
b0fh

62

In Mac OS X (Mavericks), l'installazione delle librerie con brewe l'impostazione NOKOGIRI_USE_SYSTEM_LIBRARIES=1prima di installare la gemma ha fatto il trucco per me.

riassumendo:

  • Se precedentemente installato, disinstallare la gemma:

    gem uninstall nokogiri
  • Utilizzare Homebrew da installare libxml2, libxslte libiconv:

    brew install libxml2 libxslt libiconv
  • Installa la gemma specificando i percorsi delle librerie da collegare:

    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"

Ho riscontrato alcuni errori su libiconv: "Apple distribuisce libiconv con OS X, lo puoi trovare in / usr / lib." Ma semplicemente copiare il tuo script di installazione gemma ha funzionato :) Grazie!
Automatico,

Grazie! dopo un'intera mattinata cercando di installare nokogiri, la tua risposta (in particolare con i percorsi di configurazione) finalmente ha funzionato - piuttosto che l'installazione affermando (piuttosto inutilmente) che libxml2 non esisteva, anche quando i percorsi erano corretti.
Pebbl

2
Usare la porta invece della preparazione su OS X e andare avanti ha $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogirifatto il trucco
Andres Kütt

2
In OSX El Capitan 10.11.2, devo usarlo brew install libxml2 libxslt homebrew/dupes/libiconvperché funzioni
Hai Feng Kao,

2
Inoltre, devo aggiungere --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"affinché il gem install nokogiricomando funzioni. Altrimenti, mostrerà libxml2 version 2.6.21 or later is required!(la mia versione di libxml2 è 2.9.2)
Hai Feng Kao,

22

Ho appena avuto lo stesso problema su Fedora 13. Dopo una ricerca frustrante e senza successo da fare

gem install nokogiri

lavoro per me, sono stato in grado di installarlo e aggirare l'errore libxml2 tramite yum.

Installa semplicemente la gemma yuminvece del gemcomando:

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

Questo mi ha aiutato a trovare la risposta giusta per Fedora e, mentre sto usando RVM per la gestione dei pacchetti di Ruby,

yum install rubygem-nokogiri

attirerà tutte le gemme e le dipendenze di Ruby nel sistema, non nel mio ambiente RVM, e nella mia esperienza che porta a un'esperienza molto frustrante e umiliante.

Quindi, prendendo la tua gemma di Yum Nokogiri puoi usare:

yum provides  rubygem-nokogiri

e ottenere un elenco delle dipendenze per rubygem-Nokogiri che mi ha mostrato le librerie mancanti. Successivamente ho corso:

yum install libxml2-devel libxslt libxslt-devel

Ora Nokogiri si compila nelle installazioni Fedora e Nokogiri. D'oh !, abbiamo bisogno delle intestazioni per compilare Nokogiri dalle librerie di sviluppo.


Questo è stato per me, anche se in Ubuntu ho dovuto usare apt-get install libnokogiri-ruby1.9.1 , quindi modificare il Gemfile per chiedere nokogiri 1.5.5 invece di 1.5.9
ffflabs,

13

In Mac OS X (Mavericks) se nessuna di queste soluzioni funziona, prova:

ARCHFLAGS="-arch x86_64" gem install nokogiri

o

ARCHFLAGS="-arch i386" gem install nokogiri

a seconda dell'architettura del sistema.


13

Di solito sono necessari file di sviluppo per la creazione di gemme. Provare:

sudo apt-get install libxslt-dev libxml2-dev

(Ho appena visto che Eric ha suggerito lo stesso in un commento.)


11

Sono stato in grado di ottenere questo installato con Chocolatey , Windows 8.1 x64 e 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

Dovrai verificare che il numero di versione nei percorsi sia corretto.

Potrebbe essere necessario aggiungere il repository NuGet di Microsoft:

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

Ottengo "Impossibile trovare il pacchetto libxml2". Quali fonti hai in cioccolatini?
Isaac Waller,

3
Trovato il problema! Le fonti di Nuget sono state disabilitate nel file delle fonti di Chocolatey! Ma gem non funziona: [tid-1789500] 126: Impossibile trovare il modulo specificato. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric

@RatkoStibric Credo che bisogna costruire con le librerie dinamiche: ...\x64\Release\dynamic\cdecl.
Chloe,

1
Una volta installato il cioccolato, aggiungi una fonte usando il seguente comando:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck,

1
Grazie per Chocolatey, non l'ho mai saputo prima!
Richard Peck,

11

Sarà:

sudo yum install -y libxml2 libxml2-devel

sui server RHEL.


6

Su macOS nessuno dei precedenti / inferiori aveva funzionato davvero per me fino a quando non ho esplicitamente fornito il percorso XCode libxml2 a --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

Sono stato in grado di installare Nokogiri 1.6.5 su Fedora 20 facendo:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Quindi in esecuzione:

gem install nokogiri

4

Per chiunque abbia riscontrato questo problema, l'ho risolto eseguendo questo comando nella directory del progetto

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

Aggiornamento: mi sono imbattuto di nuovo in questo e ho provato ad aggiornare la gemma che ha funzionato per me ...

gem update nokogiri


2

Hai provato a installare libxml2? Non da rubygems, ma tramite il processo di installazione standard per il tuo sistema operativo. Su Ubuntu / Debian ad esempio:

sudo apt-get install libxml2

Su qualsiasi versione recente di OS X dovrebbe già essere installato.


Sono su Ubuntu e ho seguito tutte le installazioni di cui sopra, come detto nelle altre domande su StackOverflow.
Rohit A.

1

Per gli utenti OSX, se hai già avuto successo con l'installazione di Nokogiri, ma stai riscontrando errori durante l'installazione, diciamo, usando una nuova versione di Ruby che hai aggiunto e quell'errore che include un messaggio come:

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

Questo potrebbe essere indicativo di un aggiornamento XCode che si è verificato tramite l'App Store, manualmente o automaticamente, e che non lo hai aperto da quel momento.

In tal caso, dovresti essere in grado di aprire XCode, accettare la nuova licenza e quindi installare Nokogiri correttamente.


1

Su Mac OS X Yosemite il mio errore è stato quello di provare a utilizzare sudo gem installquando è una regola empirica non utilizzare i privilegi di superutente durante l'installazione di gemme.

Nel mio caso ha provato a modificare l'installazione di sistema di Ruby, e non è una buona idea. Ho installato rbenv, ho installato Ruby 2.2.2 e lo ho impostato come global, che è un termine della documentazione di rbenv. Dopo di che Nokogiri potrebbe installarsi con un semplice

gem install nokogiri

Non sono stati necessari hack o soluzioni alternative, solo un ambiente impostato correttamente; Nokogiri fa il resto perfettamente.


L'uso sudoè OK SE capisci come funziona, dove avrà effetto, perché i file da installare o aggiornare dovrebbero essere installati e come annullare l'azione se fallisce. Altrimenti, usare una sandbox come rbenv o RVM è davvero una buona idea.
Tin Man,

1

È stato in grado di installare vagrant-awe seguendo il post sopra ma usando il comando come segue:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws


0

Sono stato in grado di installare Nokogiri eseguendo i seguenti pacchetti:

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

0

=== TLDR ===

Come indicato dalle istruzioni , compilare Ruby con l'ultimo compilatore clang, o almeno la stessa versione che Rubygems utilizzerà per compilare le estensioni native di Nokogiri libxml e libxsl.

Se usando RVM, costruire dalla sorgente con la --with-ggc=clangbandiera è stato quello che ha fatto per me:

rvm install 2.2 --with-gcc=clang

Sostituisci 2.2con qualsiasi versione desideri. --with-gcc=clangassicura che RVM costruisca dal sorgente e usi clang per farlo; altrimenti RVM potrebbe essere un Ruby binario pre-costruito, che è ciò che mi ha fatto inciampare.

Quindi, installa Nokogiri normalmente usando Bundler o Rubygems.

=== IN PROFONDITÀ ===

Ho lottato con questo per un po '. gem install nokogirimi ha dato:

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

Scavando in mkmf.logho visto:

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

Nokogiri fornisce i propri libxml e libxsl (a partire dalla 1.6.4). La firma definita nella copia locale di parser.h di Nokogiri (che si trova nella directory di installazione gem) è:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Quindi non sapevo come utilizzare la chiamata del metodo nell'uso del file conftest.c sigillato ermeticamente con il file header per parser.h.

Quando mi sono reso conto di aver probabilmente installato un Ruby binario, ho rimosso e reinstallato usando --with-gcc=clang(per forzare la compilazione e usare il clang) e il problema è stato risolto:

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

Non sono esattamente sicuro del perché funzioni come l'intestazione /usr/include/libxml2/libxml/parser.hlibxml di sistema abbia la stessa firma della copia locale di Nokogiri.

È strano, ma ha funzionato. Assicurati di compilare un Ruby con clang.


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

Cambia la tua versione con esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.