Usuario de Mac y Obteniendo ADVERTENCIA: Nokogiri fue construido contra la versión 2.7.8 de LibXML, pero ha cargado 2.7.3 de forma dinámica

Hice todo tipo de investigaciones e intenté muchas cosas diferentes. Sé que esta pregunta ha sido respondida muchas veces, pero ninguna de las soluciones sugeridas me funciona.

Después de actualizar a Lion, recibo fallas de segmentación en Ruby. Estoy bastante seguro de que es Nokogiri. Así que instalé libxml2 a través de Homebrew. brew link libxml2 . Luego reinstalé Nokogiri usando esa versión de la biblioteca.

Para prueba:

 $ nokogiri -v # Nokogiri (1.5.0) --- warnings: [] nokogiri: 1.5.0 ruby: version: 1.9.2 platform: x86_64-darwin11.0.0 description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0] engine: ruby libxml: binding: extension compiled: 2.7.8 loaded: 2.7.8 

Ya he incluido Nokogiri en la parte superior de mi gemfile y también lo he requerido en mi archivo de entorno. No tengo idea de por qué sigo recibiendo esa advertencia.

¿Alguna sugerencia o idea para asegurarse de que está cargando la versión correcta de libxml2?

Acabo de pasar la mayor parte de la mañana trabajando en esta advertencia. Esta solución es para personas que usan Mac OS Lion. La solución anterior que se usa

 bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local 

es para Snow Leopard con libxml2 instalado a través de MacPorts.

Con Lion, libxml2 se carga como parte del proceso de arranque. Independientemente de lo que señale libxml2 Nokogiri, la biblioteca predeterminada del sistema Lion para libxml2 se usará en tiempo de ejecución. Lion usa libxml2.2.7.3 encontrado en /usr (not /usr/local ).

Como se mencionó en muchos otros lugares, uno puede simplemente ignorar la advertencia. Si, como yo, la advertencia te vuelve loco, puedes hacer esto:

 bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local 

Curiosamente, si escribe nokogiri -v en la línea de comando obtendrá la advertencia opuesta:

 WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8 

Esto sugiere que hay más sobre cómo se está cargando libxml2, con Ruby y Rails usando el sistema cargado libxml2 y la línea de comando usando libxml2 desde la ruta del entorno. De todos modos, esto silencia el error para mí.

Lo diré de nuevo, esto es solo para Lion. La solución anterior funcionará para Snow Leopard.

Este es el final de la respuesta. Deja de leer aquí.


OK, no dejaste de leer … bueno …

¡¡¡¡¡¡NO RECOMENDADO!!!!!!

Usted ha sido advertido. Puede verificar que Mac OSX esté cargando la biblioteca libxml2 en su rutina de arranque al deshabilitar libxml2 que se encuentra en /usr/lib . Haga algo como copiar todas las versiones de libxml2*.dylib a libxml2*.dylib.old (en mi máquina esto era libxml2.2.7.3 , libxml2.2 y libxml2 ).

Después de haber hecho esto, ejecutar Nokogiri no producirá ningún error. Esto se debe a que no puede encontrar el libxml2 cargado y ahora seguirá la ruta del entorno, encontrando finalmente libxml2.2.7.8 en /opt/local .

PERO no podrá copiar los viejos archivos libxml. Esto se debe a que el sistema operativo necesita libxml2 que se cargó en el arranque.

Al apagar y volver a encender su máquina se encenderá. La pantalla de inicio de sesión se bloqueará y se colgará. Apague y vuelva a encender en el modo de usuario único (mantenga presionado ComandoS durante el reinicio). Puedes ver el arranque se produce. Bajo y he aquí, arroja un error que no puede cargar libxml2 y luego deja de funcionar.

Apagar y encender de nuevo. Esta vez arranque en modo de recuperación (mantenga presionado ComandoR o mantenga presionada la opción y luego seleccione el disco de recuperación). En modo de recuperación, abra el terminal ( utilities/terminal ). Monte /usr/lib en su HD (pruebe /Volumes/Macintosh\ HD/usr/lib ) y copie los archivos libxml2 nuevamente. Reinicie y todo estará bien.

Si instaló Nokogiri con gem install nokogiri , puede resolver esta advertencia ejecutando gem pristine nokogiri para recomstackr la extensión C de la gem.

Si instaló Nokogiri con la bundle install , puede resolver esta advertencia ejecutando el bundle exec gem pristine nokogiri para recomstackr la extensión C de la gem siempre que Bundler lo haya instalado.

Para solucionar esto, si está utilizando homebrew y bundler, agregue gem 'nokogiri' a la parte superior de su Gemfile , luego ejecute estos comandos:

 gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle install 

Si no usa bundler, ejecute estos comandos en su lugar:

 gem uninstall nokogiri libxml-ruby brew update brew uninstall libxml2 brew install libxml2 --with-xml2-config brew install libxslt gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ 

En su aplicación, primero debe solicitar nokogiri , para forzar a la aplicación a cargar la biblioteca dinámica libxml2 en lugar de la versión anterior del sistema de libxml2 cargada por gems que no especificó qué biblioteca cargar.

Nada de esto funcionó para mí.

Tenía libxml2 instalado en una versión posterior (2.7.8) con brew. Esto causó que nokogiri comstackra contra él y los problemas posteriores. Solución, elimínelo, luego compile, luego instálelo si lo desea.

Esto es lo que funcionó:

  • brew uninstall libxml2 (si se instaló previamente)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (opcional)

La solución (para mí) después de actualizar a Mountain Lion fue mucho más simple:

 gem uninstall nokogiri # (and ignore the warnings about dependencies) gem install nokogiri 

Según el comentario de patrickmcgraw anterior, simplemente poner nokogiri como la primera entrada en mi Gemfile funcionó para mí. Lo estoy poniendo como una respuesta separada porque el comentario original ha sido enterrado.

 source 'http://rubygems.org' gem 'nokogiri' gem 'rails', '3.0.20' etc... 

Bundler tiene opciones para establecer las ubicaciones de comstackción predeterminadas. Entonces, por ejemplo, con libxml2 instalado a través de macports:

 $ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local 

Después de hacer esto y de bundle install , la advertencia desapareció.

También hay algunos ejemplos útiles para configurar las opciones de comstackción en la wiki de nokogiri .

Parece que ha actualizado las bibliotecas de su sistema después de instalar la gem, por lo que debe actualizar Nokogiri. Para usar la versión de lib actual:

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

Tuve un problema similar y lo resolví de esta manera:

En mi caso, tengo RVM instalado, y tenía conjuntos de gems @global y @project. Ambos tenían nokogiri instalado y uno de ellos había construido con diferentes libxml.

Reconstruir ambos (tengo razones para hacerlo) resolvió el problema.

Espero que esto ayude..

 gem uninstall nokogiri bundle #install nokogiri again 

Si eso falla con “libxml2 falta”. y ves gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log tratando de usar “/usr/bin/gcc-4.2 …”, entonces te falta /usr/bin/gcc-4.2

Solución:

 sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2 

Antes de:

 $ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 

Después:

 $ ll /usr/bin/gcc* lrwxr-xr-x 1 root wheel 12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2 lrwxr-xr-x 1 root wheel 12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc 

Si realmente estás perdiendo libxml2 libxslt, entonces

 brew update brew install libxml2 libxslt brew link libxml2 libxslt bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/ bundle 

FYI: estoy ejecutando Mountain Lion con brew, y bundler.

joya instalar libxml-ruby me ayuda

De hecho, tenía 2 versiones de libxml instaladas, una de origen, una de RPM.

La siguiente es mi solución completa

Desinstalé el origen (del directorio fuente)

 sudo make uninstall 

Eliminar paquetes

 rm -rf ~/.bundle ~/.bundler 

LD actualizado (podría tener que hacer esto como root, no sudo)

 sudo ldconfig 

Luego reinstaló el paquete

 bundle install 

Acabo de toparme con esto yo mismo (OS X Lion 10.7.5). Mi mensaje exacto fue: Nokogiri fue comstackdo contra la versión 2.8.0 de LibXML, pero cargó de forma dinámica 2.7.3

Probé algunas sugerencias mencionadas aquí, ninguna funcionó, pero esto hizo:

 gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local 

La explicación es: “Esto sucede porque se usa el sistema Lion predeterminado libxml2 (cargado en bootstrap), independientemente de contra qué se haya creado libxml2 Nokogiri”.

Créditos a: https://coderwall.com/p/o5ewia

Sistema operativo: Maverick 10.9.3

Ruby 1.9.3

ADVERTENCIA: Nokogiri se compiló contra LibXML versión 2.9.1, pero cargó dinámicamente 2.9.0

Mi solución:

 gem uninstall nokogiri brew update cd /usr/local brew versions libxml2 git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0 brew install libxml2 bundle install or gem install nokogiri -v "1.5.11" 

Espero que esto ayude