La instalación de Nokogiri falla, falta el archivo libxml2

Siempre trabajé para solucionar los problemas de instalación de Nokogiri siguiendo la documentación del tutorial ” Instalar Nokogiri “.

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

libxml2 is missing. please visit  

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 con Desbordamiento de stack y ninguno me ayudó. ¿Alguien tiene una solución?

Primero, instale las dependencias:

 sudo apt-get install libxslt-dev libxml2-dev 

Si aún recibes el error, es posible que te falte una cadena de herramientas del comstackdor:

 sudo apt-get install build-essential 

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

La prueba de comstackción Nokogiri comstack un archivo de encabezado libxml2 para verificar que está presente, sin embargo, no distingue entre “falta libxml2” y “falta un comstackdor para probar libxml2”.

Es posible que necesite instalar ambos paquetes

 sudo apt-get install libxslt-dev libxml2-dev 

En Mac OS X (Mavericks), instalar las bibliotecas con brew y configurar NOKOGIRI_USE_SYSTEM_LIBRARIES=1 antes de instalar la gem me sirvió de algo.

Resumiendo:

  • Si se instaló previamente, desinstala la gem:

     gem uninstall nokogiri 
  • Use Homebrew para instalar libxml2 , libxslt y libiconv :

     brew install libxml2 libxslt libiconv 
  • Instale la gem especificando las rutas a las bibliotecas a las que se va a 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" 

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

 gem install nokogiri 

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

Simplemente instala la gem a través de yum lugar del comando gem :

 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 

incluirá todas las gems y dependencias de Ruby en el sistema, no en mi entorno RVM, y en mi experiencia eso conduce a una experiencia muy frustrante y humillante.

Por lo tanto, tomando su hallazgo de la gem Nokogiri yum puede 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 comstack en las instalaciones de Fedora y Nokogiri. D’oh !, necesitamos los encabezados para comstackr Nokogiri de las bibliotecas de desarrollo.

Por lo general, necesitas archivos de desarrollo para construir gems. Tratar:

 sudo apt-get install libxslt-dev libxml2-dev 

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

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 architecture de tu sistema

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.

Posiblemente necesite agregar el repository NuGet de Microsoft:

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

Será:

 sudo yum install -y libxml2 libxml2-devel 

en servidores RHEL.

Pude instalar Nokogiri 1.6.5 en Fedora 20 haciendo:

 export NOKOGIRI_USE_SYSTEM_LIBRARIES=true 

Luego corriendo:

 gem install nokogiri 

Para cualquier otra 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 de nuevo e intenté actualizar la gem que funcionó para mí …

gem update nokogiri

En macOS, ninguna de las anteriores / inferiores me había funcionado realmente 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 

¿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.

Para los usuarios de OSX, si has tenido éxito instalando Nokogiri antes, aún tienes errores al instalarlo, digamos, usando una nueva versión de Ruby que has 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 ha producido una actualización de XCode a través de App Store, ya sea de forma manual o automática, y que no la haya abierto desde ese momento.

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

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

En mi caso, intentó modificar la instalación del sistema de Ruby, y esa no es una buena idea. Instalé rbenv, instalé Ruby 2.2.2 en é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 se necesitaban hacks ni soluciones alternativas, solo un entorno adecuadamente establecido; Nokogiri hace el rest perfectamente.

Pudo instalar vagabundo respetuoso siguiendo la publicación anterior pero usando el comando de la siguiente manera:

 NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws 

Para Windows x64:

 gem inst nokogiri --pre --platform ruby 

Para obtener más información, consulte este hilo: https://github.com/sparklemotion/nokogiri/issues/864

Pude instalar Nokogiri ejecutando los siguientes paquetes:

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

=== TLDR ===

Como lo indican las instrucciones , cree Ruby con el último comstackdor clang, o al menos la misma versión que utilizará Rubygems para comstackr las extensiones nativas de Nokogiri libxml y libxsl.

Si utilizo RVM, construir desde la fuente con la bandera --with-ggc=clang fue lo que hizo por mí:

 rvm install 2.2 --with-gcc=clang 

Reemplace 2.2 con la versión que desee. --with-gcc=clang asegura construcciones RVM desde la fuente y utiliza clang para hacerlo; de lo contrario, RVM puede ser un Ruby binario preconstruido, que es lo que me hizo tropezar.

Luego, instale Nokogiri normalmente usando Bundler o Rubygems.

=== EN PROFUNDIDAD ===

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

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

Buscando 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 proporciona su propio libxml y libxsl (a partir de 1.6.4). La firma definida en la copia local de Nokogiri de parser.h (que se encuentra debajo del directorio de instalación de gem) es:

 xmlParseDoc (const xmlChar *cur); 

Por lo tanto, no sabía cómo utilizar el método en el archivo comprimido herméticamente sellado. El uso del archivo .c no coincidía con el archivo de cabecera para el analizador.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 comstackción y uso clang) y el problema fue resuelto:

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

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

Es extraño, pero funcionó. Solo asegúrate de comstackr un Ruby con clang.

 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 eso.