La instalación de Nokogiri falla: falta libxml2

156

Siempre resolví los problemas de instalación de Nokogiri siguiendo la documentación en el tutorial " Instalación de Nokogiri ".

Pero esta vez, incluso después de instalar todas las dependencias, no se ha instalado Nokogiri. Obtuve el siguiente error:

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

Intenté instalarlo especificando los directorios libxml2 y libxslt:

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

pero devolvió el mismo error.

Seguí todos los demás artículos relacionados de Stack Overflow y ninguno ayudó. ¿Alguien tiene una solución?

Rohit A.
fuente
1
¿Cuál es tu sistema operativo?
Jake Jones
2
Esta es la respuesta más adecuada: sudo apt-get install libxslt-dev libxml2-dev
Pratik Bothra

Respuestas:

163

Primero, instale las dependencias:

sudo apt-get install libxslt-dev libxml2-dev

Si aún recibe el error, es posible que le falte una cadena de herramientas del compilador:

sudo apt-get install build-essential

Obtendrá el error "libxml2 is missing" si le falta una cadena de herramientas de compilación (al menos me encontré con este problema en Debian Lenny).

La prueba de compilación Nokogiri compila un archivo de encabezado libxml2 para verificar que está presente, sin embargo, no diferencia entre "falta libxml2" y "falta un compilador para probar libxml2".

Erik Peterson
fuente
44
Si ese no es el problema, es posible que deba instalar libxml2-dev
Erik Peterson
1
Ejecuté el comando anterior y obtuve el error 'falta libxml2'. ¿Me puede decir más acerca de la instalación de la cadena de herramientas de construcción? porque no encontré mucha ayuda.
Rohit A.
1
Recibí ese mensaje porque no tenía instalado gcc (ni ningún otro compilador). No tenía una cadena de herramientas de compilación.
Erik Peterson
77
Si está en una Mac: brew install libxslt luego brew install libxml2
Sam Backus
245

Es posible que necesite instalar ambos paquetes

sudo apt-get install libxslt-dev libxml2-dev
Ryan
fuente
77
¿Cómo puede un comentario valorar esto altamente por debajo de la respuesta aceptada?
Nueva Alejandría
3
Porque la pregunta decía "incluso después de instalar todas las dependencias". Entonces la respuesta aceptada es la correcta.
b0fh
62

En Mac OS X (Mavericks), la instalación de las bibliotecas con brewy la configuración NOKOGIRI_USE_SYSTEM_LIBRARIES=1antes de instalar la gema fue el truco para mí.

Resumiendo:

  • Si se instaló previamente, desinstale la gema:

    gem uninstall nokogiri
  • Homebrew utilizar para instalar libxml2, libxslty libiconv:

    brew install libxml2 libxslt libiconv
  • Instale la gema especificando las rutas a las bibliotecas con las que se vinculará:

    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
fuente
Recibí algunos errores sobre libiconv: "Apple distribuye libiconv con OS X, puede encontrarlo en / usr / lib". Pero simplemente copiar su script de instalación de gemas funcionó :) ¡Gracias!
Automático
¡Gracias! después de una mañana entera tratando de instalar nokogiri, su respuesta (específicamente con las rutas de configuración) finalmente lo hizo funcionar, en lugar de que la instalación indicara (de manera poco útil) que libxml2 no existía, incluso cuando las rutas eran correctas.
Pebbl
2
Usar el puerto en lugar de preparar cerveza en OS X y simplemente hacer $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiriel truco
Andres Kütt
2
En OSX El Capitan 10.11.2, tengo que usarlo brew install libxml2 libxslt homebrew/dupes/libiconvpara que funcione
Hai Feng Kao
2
Además, necesito agregar --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"para que el gem install nokogiricomando funcione. De lo contrario, se mostrará libxml2 version 2.6.21 or later is required!(mi versión libxml2 es 2.9.2)
Hai Feng Kao
22

Acabo de tener el mismo problema en Fedora 13. Después de una búsqueda frustrante y sin éxito para hacer

gem install nokogiri

funciona para mí, pude instalarlo y evitar el error libxml2 a través de yum.

Simplemente instale la gema vía en yumlugar del gemcomando:

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

Esto me ayudó a encontrar la respuesta correcta para Fedora y, como estoy usando RVM para la administración de paquetes de Ruby,

yum install rubygem-nokogiri

atraerá todas las gemas y dependencias de Ruby al sistema, no a mi entorno RVM, y en mi experiencia eso lleva a una experiencia muy frustrante y humillante.

Entonces, tomando tu hallazgo de la gema Nokogiri yum puedes usar:

yum provides  rubygem-nokogiri

y obtener una lista de las dependencias para rubygem-Nokogiri que me mostró las bibliotecas que faltaban. Después de eso corrí:

yum install libxml2-devel libxslt libxslt-devel

Ahora Nokogiri compila en las instalaciones de Fedora y Nokogiri. ¡Oh, necesitamos los encabezados para compilar Nokogiri de las bibliotecas de desarrollo!

Sojoodi
fuente
Esto lo hizo por mí, aunque en ubuntu tuve que usar apt-get install libnokogiri-ruby1.9.1 , luego edité el Gemfile para pedir nokogiri 1.5.5 en lugar de
1.5.9
13

En Mac OS X (Mavericks) si ninguna de estas soluciones funciona, intente:

ARCHFLAGS="-arch x86_64" gem install nokogiri

o

ARCHFLAGS="-arch i386" gem install nokogiri

dependiendo de la arquitectura de su sistema.

rilla
fuente
13

Por lo general, necesita archivos de desarrollo para construir gemas. Tratar:

sudo apt-get install libxslt-dev libxml2-dev

(Acabo de ver que Eric sugirió lo mismo en un comentario).

pduersteler
fuente
11

Pude instalar esto con Chocolatey , Windows 8.1 x64 y 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

Deberá verificar que el número de versión en las rutas sea correcto.

Es posible que deba agregar el repositorio NuGet de Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
Chloe
fuente
Obtengo 'No se puede encontrar el paquete libxml2'. ¿Qué fuentes tienes en Chocolately?
Isaac Waller
3
Encontrado el problema! Nuget sources fue deshabilitado en el archivo de fuentes de Chocolatey! Pero gem no funciona: [tid-1789500] 126: No se pudo encontrar el módulo especificado. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric
@RatkoStibric creo que se tiene que construir con las bibliotecas dinámicas: ...\x64\Release\dynamic\cdecl.
Chloe
1
Una vez que se instala chocolately, agregue una fuente con el siguiente comando:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Richard Peck
1
Gracias por Chocolatey, ¡nunca antes supe eso!
Richard Peck el
11

Será:

sudo yum install -y libxml2 libxml2-devel

en servidores RHEL.

hohner
fuente
6

En macOS, ninguno de los anteriores / inferiores realmente funcionó para mí hasta que proporcioné explícitamente la ruta 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
sollozo
fuente
4

Pude instalar Nokogiri 1.6.5 en Fedora 20 haciendo:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Luego corriendo:

gem install nokogiri
Simone
fuente
4

Para cualquier persona que experimente este problema, lo resolví ejecutando este comando dentro del directorio del proyecto

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

Actualización: me encontré con esto nuevamente e intenté actualizar la gema que funcionó para mí ...

gem update nokogiri

Jbur43
fuente
2

¿Has intentado instalar libxml2? No de rubygems, sino a través del proceso de instalación estándar para su sistema operativo. En Ubuntu / Debian, por ejemplo:

sudo apt-get install libxml2

En cualquier versión reciente de OS X ya debería estar instalado.

d11wtq
fuente
Estoy en ubuntu y he seguido todas las instalaciones anteriores como se indica en las otras preguntas de stackoverflow.
Rohit A.
1

Para los usuarios de OSX, si ya han tenido éxito al instalar Nokogiri antes, aún tienen errores al instalarlo, digamos, usando una nueva versión de Ruby que han agregado y ese error que incluye un mensaje como:

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

Esto podría ser indicativo de que se realizó una actualización de XCode a través de la App Store, ya sea manual o automáticamente, y que no la ha abierto desde entonces.

Si es así, debería poder abrir XCode, aceptar la nueva licencia y luego instalar Nokogiri con éxito.

Paul Fioravanti
fuente
1

En Mac OS X Yosemite, mi error fue que intenté usar sudo gem install cuando es una regla general no usar privilegios de superusuario al instalar gemas.

En mi caso, trató de modificar la instalación del sistema de Ruby, y esa no es una buena idea. Instalé rbenv, instalé Ruby 2.2.2 a través de él y lo configuré como global, que es un término de la documentación de rbenv. Después de eso, Nokogiri podría instalarse con un simple

gem install nokogiri

No fueron necesarios hacks ni soluciones alternativas, solo un entorno correctamente configurado; Nokogiri hace el resto perfectamente.

Aleks N.
fuente
El uso sudoestá bien SI comprende cómo funciona, dónde surtirá efecto, por qué los archivos que se instalan o actualizan deben instalarse y cómo deshacer la acción si falla. De lo contrario, usar una caja de arena como rbenv o RVM es una REALMENTE buena idea.
The Tin Man
1

Pude instalar vagrant-awe siguiendo la publicación anterior pero usando el comando de la siguiente manera:

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

Pude instalar Nokogiri ejecutando los siguientes paquetes:

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

=== TLDR ===

Como indican las instrucciones , construya Ruby con el último compilador de clang, o al menos la misma versión que Rubygems usará para compilar las extensiones nativas de Nokogiri libxml y libxsl.

Si usé RVM, construir desde la fuente con la --with-ggc=clangbandera fue lo que lo hizo por mí:

rvm install 2.2 --with-gcc=clang

Reemplace 2.2con la versión que desee. --with-gcc=clangasegura las construcciones RVM desde la fuente y usa el sonido metálico para hacerlo; de lo contrario, RVM puede ser un Ruby binario preconstruido, que es lo que me hizo tropezar.

Luego, instale Nokogiri de forma normal usando Bundler o Rubygems.

=== EN PROFUNDIDAD ===

Luché con esto por un tiempo. gem install nokogirime dio:

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

Cavando en mkmf.log vi:

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

Nokogiri suministra sus propios libxml y libxsl (a partir de 1.6.4). La firma definida en la copia local de Nokogiri de parser.h (que se encuentra en el directorio de instalación de gemas) es:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Así que no sabía cómo la llamada al método en el uso herméticamente sellado del archivo conftest.c no podía coincidir con el archivo de encabezado para parser.h.

Cuando me di cuenta de que probablemente había instalado un Ruby binario que eliminé y reinstalé usando --with-gcc=clang(para forzar la compilación y usar clang) y el problema se resolvió:

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

No estoy exactamente seguro de por qué eso funciona como el encabezado libxml del sistema /usr/include/libxml2/libxml/parser.h tiene la misma firma que la copia local de Nokogiri.

Es raro, pero funcionó. Solo asegúrate de compilar un Ruby con sonido metálico.

Johnster
fuente
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 tu versión con ella.

Liber
fuente