¿Por qué falla la instalación de Nokogiri en Mac OS con la falta de libiconv?


159

He estado tratando de instalar Nokogiri en Mac OS 10.9.3 y lo que sea que intente, la instalación falla al final con el siguiente mensaje de error:

$ sudo 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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib
Building native extensions with: '--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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib'
This could take a while...
Building nokogiri using packaged libraries.
ERROR:  Error installing nokogiri:
    ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb --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.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib
Building nokogiri using packaged libraries.
checking for iconv.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
checking for libiconv_open() in iconv.h... no
checking for libiconv_open() in -liconv... no
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
    --help
    --clean
    --use-system-libraries
    --enable-static
    --disable-static
    --with-zlib-dir
    --without-zlib-dir
    --with-zlib-include
    --without-zlib-include=${zlib-dir}/include
    --with-zlib-lib
    --without-zlib-lib=${zlib-dir}/lib
    --enable-cross-build
    --disable-cross-build


Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.2.1 for inspection.
Results logged to /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.2.1/ext/nokogiri/gem_make.out

Después de seguir mucha ayuda encontrada en la web, incluida la construcción e instalación de libxml2 y libxslt usando brew y la construcción de libiconv desde las fuentes (como se describe en " Instalación de Nokogiri "), el error sigue siendo el mismo.

Al intentar ejecutar la instalación de Nokogiri, libxml2 y libxslt parecen encontrarse bien, pero no libiconv.

¿Alguien con un mejor conocimiento de estas cosas sabe cómo instalar Nokogiri?


No muestra los comandos exactos que está tratando de usar, por lo que dispararemos en la oscuridad tratando de responder. Siempre uso gem install nokogiri, pero luego uso RVM para administrar mis instalaciones de Mac OS Ruby. libxml y libxslt no están relacionados con iconv, por lo que recomiendo hacer su pregunta en Nokogiri-talk, que es su foro de soporte. No recuerdo haber tenido problemas de ícono al instalar Nokogiri, y lo tengo en un montón de máquinas.
The Tin Man

1
Mientras tanto, he abierto un ticket en github: github.com/tenderlove/nokogiri/issues/442 que contiene un poco más de información.
polarblau

2
Aquí hay un enlace para resolver el mismo problema en OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri". No lo use sudopara instalar gemas ni modificar el Ruby predeterminado. En su lugar, use rbenv o RVM para administrar un Ruby por separado. Esto se cubre varias veces en Stack Overflow.
The Tin Man

¿Has intentado desinstalar xz antes de instalar nokogiri?
lifeisfoo

Respuestas:


237

Tuve el mismo problema. Desafortunadamente, la " Instalación de Nokogiri " no cubre los problemas de Iconv. Así es como resolví el problema.

Primero instala homebrew , te hará la vida más fácil. Si ya lo tiene instalado, asegúrese de obtener las últimas fórmulas actualizándolas así:

brew update

Nota : en OSX 10.9+ puede que necesite instalar las herramientas de comando xCode para permitirle instalar libiconv.

xcode-select --install

luego instale una versión más nueva de libiconv

brew install libiconv

luego instala tu gema

gem install nokogiri -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.14

55
Una vez que hice el "brew install libiconv" y el "brew link libiconv" pude instalar nokogiri con éxito. Espero que eso signifique que no tengo una gran dependencia de la versión específica de libiconv instalada por brew.
Steven Chanin

87
Cuando intento brew install libiconvescupir: Error: No hay una fórmula disponible para libiconv Apple distribuye libiconv con OS X, puede encontrarlo en / usr / lib. Algunos scripts de compilación no lo detectan correctamente, compruebe las fórmulas existentes para encontrar soluciones.
Seth Bro

62
Si está ejecutando Mavericks, es posible que tenga que instalar las herramientas de línea de comandos de Xcode: xcode-select --install. Esto solucionó el problema para mí.
Michael Stalker

34
Si aún no puede brew install libiconvobtener la fórmula correcta, use esto:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) No tuve que hacer las brewcosas; solo xcode-select --installsolucionó este problema para mí.
bjfletcher 03 de

84

Intenta usar las bibliotecas del sistema. OSX viene con libiconv en versiones más recientes, pero el script de instalación predeterminado parece tener un problema

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

Editar: si usa bundler, como lo menciona Geoff , puede hacer:

bundle config build.nokogiri --use-system-libraries

55
Si usa bundler, puede ejecutar "bundle config build.nokogiri --use-system-bibliotecas"
Geoff Evason

1
finalmente el "paquete config build.nokogiri --use-system-bibliotecas" funcionó. Odio cuando eso sucede
nils petersohn

1
Trabajó para mí en Mac OS 10.10 Yosemite.
Lloyd Dewolf

¿por qué necesito el "-" extra en el medio del comando de instalación de gemas?
Rembrandt Q. Einstein

3
Falló para mí el 10.10.3. Xcode 6.3 con libxml2 version 2.6.21 or later is required!.
Rivera

36

La solución de @ Cory contiene la respuesta correcta, pero la solución en Mavericks es en realidad mucho más simple que la solución principal, por lo que estoy volviendo a publicar solo con los pasos necesarios.

En Mavericks (OSX 10.9+):

Instale las herramientas de línea de comandos de Xcode:

xcode-select --install

luego instala tu gema:

gem install nokogiri

44
Funciona en Yosemite. Me alegro mucho de haberme desplazado hacia abajo y no haya usado respuestas anteriores.
yuяi

gran ahorro de tiempo, gracias por este consejo! funcionó un encanto para mí en disidentes
helado

¿Intentaste usar mi solución? No requiere la instalación de xcode.
Filip Kis

Esta es la solución oficial de los documentos de Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ), y la única que funcionó en El Capitan. La solución aceptada no funcionó allí.
Johannes

Trabajó para mí en El Capitán, tan irritante. Gracias por el enlace a Nokogiri docs @Johannes, realmente útil. Todos deberían mantenerse alejados de las soluciones que dicen "usar bibliotecas del sistema", un mal consejo.
Polsonby

19

Finalmente pude resolver este problema. Ninguna de las soluciones anteriores me lo arregló por completo.

Recibía este error al intentar gem install nokogirien OSX Lion 10.7.2. En primer lugar, este error enmascara el problema real al decir que falta libiconv, porque obtendrá el mismo error incluso si nokogiri no puede encontrar libxslt o libxml2, que en mi caso, no pudo.

Así que seguí las instrucciones en http://nokogiri.org/tutorials/installing_nokogiri.html en la sección Homebrew (ligeramente modificada para tener en cuenta una versión más actual de libxml2):

brew install libxml2
brew link libxml2

# install libxslt from source
wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
tar -zxvf libxslt-1.1.26.tar.gz
cd libxslt-1.1.26
./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.8
make
sudo make install

En este punto seguí las instrucciones en el sitio de nokogiri e intenté

gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26

Sin embargo, esto todavía falló porque al construir libxslt desde la fuente, instala la /includecarpeta en un lugar funky. Por lo tanto, debe especificar las carpetas liby por includeseparado de esta manera:

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt

Esto todavía no funcionaba (el mismo error de libiconv), así que intenté especificar las tres bibliotecas requeridas (libxslt, libxml2 y libiconv):

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8

¡Ahora tengo un error diferente! Seguía siendo un error, pero al menos era diferente. El proceso de creación falló con:

in /opt/local/lib/libz.1.dylib, file was built for unsupported file format which is not the architecture being linked (x86_64) for architecture x86_64

Uhh que? Después de mucho googlear, me encontré con esta publicación milagrosa: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -arquitectura/

Aparentemente, OSX Lion viene con algunas versiones malas de la biblioteca libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) y deben reemplazarse con las últimas versiones del SDK de Xcode. El artículo lo explica mejor que yo, así que lea el enlace de arriba para obtener instrucciones específicas.

Una vez que estos fueron reemplazados, corrí

gem install nokogiri -- --with-xslt-lib=/usr/local/Cellar/libxslt/1.1.26/lib --with-xslt-include=/usr/local/Cellar/libxslt/1.1.26/include/libxslt --with-iconv-dir=/usr/local/Cellar/libiconv/1.14 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8

de nuevo y todo estuvo bien. Espero que esto ayude a alguien más.


Tuve el mismo problema, pero encontré que eliminar los siguientes archivos de opt / local / lib: libz.dylib y libz.1.dylib y siguiendo el resto de estas instrucciones hicieron el truco.
Desvío el

1
Creo que / opt / local denota una instalación de MacPorts. Si está ejecutando homebrew y Macports, terminará con algo de funk (como se ve en su caso). La mejor solución es desinstalar Macports y usar homebrew para su administrador de paquetes.
Cory

Agregué una nueva solución más simple para Mavericks (OSX 10.9+) a continuación.
Micah Winkelspecht

17

Solo agregué mi voz a la multitud, pero mkmf.log dijo algo acerca de no poder encontrar símbolos para la arquitectura x86_64. Me encontré con esta solución:

sudo env ARCHFLAGS="-arch x86_64" gem install nokogiri -- --use-system-libraries

Puede que no resuelva nada para el autor de la pregunta original, pero esto puede ayudar a alguien.

Nota al margen: el nokogiri ha sido mi mayor barrera para el uso de aplicaciones de rubí. Cada vez que alguien depende de una versión diferente, tengo que descubrir cómo construirlo. Y mi problema es diferente cada vez.


1
De acuerdo con tu sentimiento nokogiri. Cada. Soltero. Hora.
jbnunn

No funcionó para mí de esta forma, pero ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesfuncionó ...
bwoebi

Esto también funcionó para mí, una solución mucho más fácil, no usé los ARCHFLAGS, solo sudo gem install nokogiri - --use-system-bibliotecas
ryudice

8

gem install nokogiri -v '1.6.6.2' -- --use-system-libraries --with-xml2-include=$(brew --prefix libxml2)/include/libxml2

Esto funcionó para mí en macos. Funciona tambien con version1.6.6.4


Trabajé sin la --with-xml2-includeopción para mí en Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
ryanc

6

Estoy usando .. OS X 10.9.4 Homebrew 0.9.4

Aquí está mi resumen de este hilo para instalar con éxito nokogiri, reparando libiconv faltante.

Instale Homebrew http://brew.sh/ O actualice a la última utilizando el siguiente comando

brew update

Instalar libxml2 libxslt

brew install libxml2 libxslt

Enlace ambos libxml2 libxslt

brew link libxml2 libxslt

Si recibe una advertencia para usar --force, solo use el comando a continuación

brew link --force libxml2 libxslt

Instale las herramientas de comando xCode para permitirle instalar libiconv

xcode-select --install

Instalar libiconv

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install

Paso final, instale nokogiri!

gem install 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 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

5

Resolví esto al Yosemitecorrer Ruby 2.1.4por

  1. asegúrese de tener instalado xCode 6.1, luego
  2. xcode-select --install, luego
  3. En la AppStore, haga clic en actualizaciones e instale la versión más reciente de las herramientas de línea de comandos (que aparentemente xcode-select --installno funciona, suspire)
  4. Luego bundle installfuncionó normalmente.

También hice un brew install libiconvpero también no estoy convencido de que ese paso fuera necesario.


No creo que brew install libiconvsea ​​necesario: nunca me molesté en encontrar el paquete adecuado y esto funcionó bien para mí. De acuerdo, puede haber estado en mi máquina desde que instalé nokogiri con ruby ​​2.1.1 antes.
jmstone617

"En la AppStore, haga clic en actualizaciones e instale la versión más reciente de las herramientas de línea de comandos (que aparentemente xcode-select --install does not do - sigh)" - no hay actualizaciones disponibles. ¿Cómo actualizo mis herramientas de línea de comandos desde Xcode? No aparecen en la sección "Descargas" del panel de preferencias.
chadoh

Esto funcionó para mí sin ir a la tienda de aplicaciones. Actualicé las herramientas de línea de comandos y el sistema operativo (a Yosemite), luego ejecuté xcode-select --instally pude instalar Nokogiri.
acero

Tuve que hacer: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-bibliotecas .. bundle install
Zack Burt


3

Mirando en el archivo mkmf, parece que nokogiri (o gema, no lo sé) intenta encontrar dependencias en / op / local /. Para mí no es el camino correcto para buscarlos.

Obligar a nokogiri a encontrar las librerías en el lugar correcto (uso homebrew) hizo el truco para mí:

$ gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/

Tal vez hay algo que arreglar en nokogiri ...

HTH


3

libiconv se eliminó de Homebrew 0.9 Ahora se recomienda compilar libiconv desde la fuente, luego hacer referencia a la instalación cuando instale la gema nokogiri. Consulte las instrucciones de instalación de Nokogiri en la sección Homebrew 0.9 en la página de instalación de Nokogiri


A partir de hoy pude ejecutar $ brew install libiconv y se descargó e instaló libiconv-1.14.tar.gz
Evolucionó el

2

Busque en el archivo mkmf.log en el directorio de compilación de la gema (por ejemplo, /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Eso tiene mucha más información. En mi caso, cuando llegué a esto, fue que Nokogiri agrega específicamente / opt / local / lib a la ruta de búsqueda de la biblioteca y GNU Backgammon había instalado allí un libiconv incompatible.


2

Suponiendo que instaló libxml2 y libxslt con MacPorts, aún podría recibir este error debido a una falta de coincidencia del orden de las rutas de inclusión y las rutas de enlace utilizadas por la llamada a have_func ('iconv_open', 'iconv.h')

Solución simple (parche): elimine libiconv. * En / usr / local / lib


Tengo libxml2 y libxslt instalado con MacPorts, pero no hay archivos libiconv. * En / usr / local / lib
Valerio Schiavoni

2
$ gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/

igual que el anterior, esta es la solución para homebrew y el uso de la instalación de gemas (aplicar cambios depende de su versión)

sin embargo, si usa Gemfile e instalación de paquete, debe aplicar la configuración del paquete antes de instalar, aquí el código

$ bundle config build.nokogiri --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-xml2-dir=/usr/local/Cellar/libxml2/2.7.8/ --with-iconv-dir=/usr/local/Cellar/libiconv/1.14

nuevamente, aplicar cambios depende de su versión

Espero que esto te ayudará.

crédito: https://gist.github.com/1344331


2

Tuve problemas similares en Mountain Lion. Resulta que había instalado libiconv a través del paquete rvm anteriormente y esto ya no es necesario para ruby ​​1.9.3 / Mountain Lion / nokogiri.

Siguiendo los consejos de https://rvm.io/packages/ , eliminé mi directorio $ rvm_path / usr y reconstruí ruby ​​1.9.3. Posteriormente, la instalación de nokogiri fue una simple instalación de gemas. ¡No te metas con brew / macports / manual source installs!


2

También puedes hacer esto en Mavericks:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer / SDKs / MacOSX10.9.sdk / usr / include / libxml2

Solo asegúrate de tener instalado xcode


la misma solución también funciona para 10.7.5: gem install nokogiri - --use-system-collections = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

Estuve peleando con Nokogiri por un tiempo hoy en OS X 10.10 Yosemite

Mi entorno estaba en mal estado por alguna razón.

which bundley which gemme estaban dando /usr/bin/bundley/usr/bin/gem lugar de~/.rbenv/shims/gem

Lo que me ayudó a corregirlo fue sudo rm -i /usr/bin/gem /usr/bin/bundle

Después de eso, yo: 1. volví a mi directorio de proyecto 2. desinstalé el dependiente 3. (re) -instalé las librerías dependientes: hice un brew install libxml2 libiconv libxslt 4. instalé mi versión ruby ​​fresh (con rbenv) 5. hice gem install bundler 6. y bundle installejecuté sin ninguna problemas.

Nokogiri estuvo bien después de eso.

Para referencia:

╰─% cat .bundle/config           
---
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
BUNDLE_JOBS: 4

╰─% which ruby bundle gem
~/.rbenv/shims/ruby
~/.rbenv/shims/bundle
~/.rbenv/shims/gem

1
En retrospectiva (que siempre es 20/20), probablemente podría haber ajustado mi variable PATH env para anteponer rbenv primero.
Sam Figueroa el

1

Necesita actualizar su homebrew a 0.9

luego sigue estos pasos

brew install libxml2 libxslt
brew link libxml2 libxslt
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar xvfz libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/Cellar/libiconv/1.13.1
make
sudo make install

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

gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.0/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.28 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.13.1/lib

Debe verificar la versión de la biblioteca de carpetas.


Link y sudo romperán las cosas. Son solo de barril por varias razones. Use fórmulas de preparación porque es mucho más fácil de mantener. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

USUARIOS HOMEBREW

Solución correcta para solucionar este problema si está utilizando homebrew:

xcode-select --install

Elija "Obtener Xcode" en el cuadro de diálogo.

brew unlink libiconv
gem install nokogiri

El paso xcode-select repara la instalación de Xcode y la instalación de Xcode Command Line Utils. Descubrí que no tenía /usr/include/iconv.h debido a algún tipo de problema con las actualizaciones o restauraciones de O / S de las copias de seguridad. Si no tiene ese archivo de encabezado y /usr/lib/libconv.dylib después de ejecutar xcode-select, lo más probable es que necesite arrastrar Xcode de la carpeta de la Aplicación a la papelera y reinstalar y luego descargar manualmente las Herramientas de línea de comandos para Xcode de https://developer.apple.com/downloads/index.action e instálelo.

Entonces necesitas desvincular el libiconv de homebrew. No necesitas esto. Y clang realmente seleccionará /usr/local/include/iconv.h sobre /usr/include/iconv.h y #definirá iconv_open a libiconv_open pero luego se vinculará contra /usr/lib/libiconv.dylib que no tiene libiconv_open que es lo que hace que las fallas de mkmf encuentren libiconv. Lo que debe hacer es eliminar el enlace de iconv.h para que nokogiri no lo encuentre.

Entonces solo construye nokogiri normalmente.

Para los nuevos usuarios, todo lo que debe hacer es instalar xcode con xcode-select e instalar nokogiri, pero si ha encontrado esta pregunta, entonces probablemente tenga una instalación fallida y no una nueva instalación de Mavericks.

Algunas de las otras respuestas aquí son definitivamente incorrectas. La mayoría de ellos intentan usar libiconv fuera de homebrew, lo cual es completamente innecesario. Las respuestas que en brew link libiconvrealidad están causando el problema de que clang se confunde e intenta leer un archivo de encabezado homebrew y vincularlo con las bibliotecas del sistema. Las respuestas que sugieren --use-system-librariesson deficientes porque nokogiri necesita vincularse con sus bibliotecas incluidas libxml2 y libxslt porque otras versiones de esas bibliotecas son incompatibles con él. Las respuestas que quieren que compiles de las fuentes son irremediablemente demasiado complicadas.

TL; DR:

  • Actualice y / o repare su instalación de Xcode
  • Desvincule su libiconv homebrew ya que intentar usarlo solo causa problemas
  • Construye nokogiri normalmente

USUARIOS RVM

Las instalaciones antiguas de RVM pueden tener un libiconv escondido en sus directorios rvm en algún lugar que está en conflicto con las bibliotecas de su sistema. Consulte https://stackoverflow.com/a/11809261/506908 para obtener más información.

USUARIOS MacPorts

Si tiene /opt/local/lib/libiconv.dylib, entonces nokogiri agrega esa ruta a la lista de directorios que busca y encontrará que la instalación de MacPorts es similar a cómo recoge el libiconv homebrew y entra en conflicto con las bibliotecas del sistema. Puedes probar:

sudo port uninstall libiconv

Si eso falla debido a dependencias, puede intentar vincular directamente con la versión de MacPorts (sin probar):

gem install nokogiri -- --with-iconv-dir=/opt/local

Confirmar que gem install nokogiri -- --with-iconv-dir=/opt/localfunciona bien con MacPorts libiconvinstalado
PartialOrder

1

Este me funcionó

sudo env ARCHFLAGS = "- arch x86_64" gem install nokogiri: 1.6.6.2 - --use-system-bibliotecas --with-xml = / usr / local / Cellar / libxml2 / 2.9.3 / --with-iconv- dir = / usr / local / Cellar / libiconv / 1.14


fue el combo de --use-system-bibliotecas y --with-iconv-dir lo que lo hizo por mí
aaaarrgh

0

Me encontré con esto, esta mañana ... después de una actualización a Mavericks. Hicimos muchas cosas Sin embargo, si alguien tiene este problema, aquí hay algunas cosas para probar.

Ejecuté 'xcode-select --install' y luego instalé las herramientas de línea de comandos (me sorprendió que esto no se actualizara en el sistema operativo ugrade). Ejecuté 'rvm implode' (lo construiré de nuevo más tarde).

Unimos dos archivos de salida de error:

~ / .vagrant.d / gems / gems / nokogiri-1.6.3.1 / ext / nokogiri / gem_make.out

~ / .vagrant.d / gems / gems / nokogiri-1.6.3.1 / ext / nokogiri / tmp / x86_64-apple-darwin12.5.0 / ports / libxml2 / 2.8.0 / configure.log

Lo que parecía indicar que el compilador de c estaba usando una configuración sorprendente.

Corrí 'env'

Salida contenida:

...
CXX=/usr/local/opt/apple-gcc42/bin/g++-4.2
...
CC=/usr/local/opt/apple-gcc42/bin/gcc-4.2
...

Estos archivos no existían en el sistema de archivos ...

Después de todos estos cambios, pasar a una nueva ventana de terminal (por lo que todo estaba fresco). La instalación de vagrant-berkshelf (que a su vez instala nokogiri) funcionó bien.

NOTA: al ejecutar 'env' en la ventana nueva ya no había una configuración para CC o CXX ...

No estoy seguro de la parte clave de esto, o si el orden importa, pero trató de recrear las partes que parecían desempeñar un papel para que esto funcione.


¿Estás seguro de que el comando gem install nokogiritiene éxito? ¿Wither con el mensaje "ya instalado" o una instalación exitosa?
Spundun

Si. He reinstalado rvm y oh-my-zsh a medida que vuelvo a crear cosas en mi Mac. Lo que no he podido averiguar es cómo instalar nokogiri en un conjunto de gemas rvm. Cuando vuelvo a 'rvm use system' puedo instalar nokogiri 1.6.3.1 sobre el 1.5.6 que viene en OS X ruby ​​2.0.0p451.
aaron blythe

Al final para mí fue stackoverflow.com/questions/19643153/… brew desinstalar apple-gcc42 brew install apple-gcc42
aaron blythe

0

Según la documentación, a partir de OSX 10.9 y Homebrew 9.5+, probablemente le falten las herramientas de desarrollo.

Instalación de Nokogiri

Solución de problemas

Si tiene problemas para mencionar que falta libiconv, se parece a esto:

Installing nokogiri (1.6.2.1) Building nokogiri using packaged libraries.

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /usr/local/rvm/rubies/ruby-2.0.0-p0/bin/ruby extconf.rb
Building nokogiri using packaged libraries.
checking for iconv.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
checking for libiconv_open() in iconv.h... no
checking for libiconv_open() in -liconv... no
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for          help with installing dependencies.
-----
*** extconf.rb failed ***

Entonces probablemente te faltan las herramientas de desarrollador adecuadas. Esta es una solución realmente fácil:

brew unlink gcc-4.2      # you might not need this step
gem uninstall nokogiri
xcode-select --install
gem install nokogiri

Esto se verifica trabajando en OSX 10.9 con el compilador clang de xcode.


0

Recibí este problema cuando actualicé mi Mac OS a Yosemite. Pude resolver este problema haciendo:

xcode-select --install
brew uninstall libiconv
brew install libiconv
gem install nokogiri

0

Tuve un problema similar y la respuesta aceptada solía funcionar para mí. Ahora, sin embargo, he estado viendo un nuevo mensaje de error donde gmkdirfalta un comando como en esta pregunta:

gem install nokogiri -v '1.5.11' falló debido a que: / usr / local / bin / gmkdir: No existe tal archivo o directorio

Lo que funcionó para mí fue primero una pequeña limpieza:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

Y luego brew unlink libiconvy cualquier otra cosa que necesite desvincular (consulte con brew doctor). Luego, las dos líneas mágicas (copiadas de la respuesta vinculada):

brew install coreutils
gem install nokogiri

0

Sencillos pasos a seguir antes de comenzar a desinstalar e instalar cualquier cosa. Compruebe si tiene CLT (herramientas de línea de comandos instaladas):

brew config

vea la versión CLT aquí si está instalada sin necesidad de reinstalación.

Esto significa que el problema es con el permiso de que haya reinstalado solo la gema del paquete que no sea sudo. Desinstalar el paquete con gem uninstall bundler reinstalar gem bundler gem install bundler

El punto más importante aquí es el permiso bajo el cual se instala el paquete de gemas, nunca se debe suponer.


-1

En primer lugar, asegúrese de seguir la guía de instalación en nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Después de haber seguido la guía, todavía tenía este problema. Así es como lo resolví:

En primer lugar, instalé iconv usando homebrew: brew install iconv

Luego desinstalé ruby, afortunadamente esto es muy fácil con rvm:

rvm uninstall 1.9.2        

Luego tuve que reinstalar ruby ​​con las siguientes opciones:

CC=gcc-4.2 rvm install 1.9.2-p290 --with-iconv-dir=/usr/local/Cellar/libiconv/1.13.1

Luego creo un conjunto de gemas con la nueva versión ruby:

rvm use 1.9.2@coolproject

Entonces finalmente puedo instalar nokogiri así:

gem install nokogiri -v=1.4.4 -- --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

-1

En mi caso, (como con scotchi) la compilación falló debido a una biblioteca iconv incompatible en / opt / local / lib. Por defecto, el proceso de compilación de Nokogiri se ve primero en / opt / local. Para forzarlo a usar un directorio de instalación diferente, / usr / local, por ejemplo, haga lo siguiente:

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

-1

Esta publicación de blog propone instalar libiconv manualmente.

Posteriormente, nokogiri se puede instalar con varios interruptores que le indican dónde encontrar libiconv (vea la publicación del blog).

Como nota al margen: después de instalar nokogiri, logré instalar gollum (cuya instalación también falló porque no pudo encontrar iconv). Sin embargo, ahora todavía tengo problemas, porque cuando inicio Gollum, Python se bloquea.


-1
$ gem install iconv # works but it is missing an iconv.so file in ruby 2.0.0-p247

$ ls -1 2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/*/*/*.so
2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so*
2.0.0-p0/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/lib/iconv/iconv.so*

$ ls -1 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/*/*/*.so
2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so*

OBSERVE EL FALTA archivo /lib/iconv/iconv.so en 2.0.0-p247 que está presente en la instalación de gemas 2.0.0-p0.

$ rbenv version
2.0.0-p247 (set by /home/XXX/tmp/.ruby-version)
$ rbenv which gem
/home/XXX/.rbenv/versions/2.0.0-p247/bin/gem
$ gem --version
1.8.25

$ rbenv which pry
/home/XXX/.rbenv/versions/2.0.0-p247/bin/pry
$ pry
[1] pry(main)> require 'iconv'
LoadError: cannot load such file -- iconv/iconv.so
from /home/XXX/.rbenv/versions/2.0.0-p247/lib/ruby/site_ruby/2.0.0/rubygems/custom_require.rb:36:in `require'

Copie el archivo sobre

$ pushd ~/.rbenv/versions/
$ cp 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/ext/iconv/iconv.so 2.0.0-p247/lib/ruby/gems/2.0.0/gems/iconv-1.0.3/lib/iconv/

¡AHORA FUNCIONA!

$ pry
[1] pry(main)> require 'iconv'
=> true

Nota: Estoy trabajando con rbenv, ¡pero este problema es específico de la instalación de gemas y debería solucionarse!
Darren Weber

esta respuesta no tiene nada que ver con la biblioteca C libiconv de la que depende la construcción de nokogiri. La respuesta realmente debería ser eliminada.
lamont

-1

Tuve que instalar gcc primero antes de ejecutar ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.