Perché l'installazione di Nokogiri su Mac OS non riesce con libiconv mancante?


159

Ho provato a installare Nokogiri su Mac OS 10.9.3 e qualunque cosa provi, l'installazione non riesce alla fine con il seguente messaggio di errore:

$ 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

Dopo aver seguito un sacco di aiuto trovato sul web, incluso lo sviluppo e l'installazione di libxml2 e libxslt usando brew e costruendo libiconv dai sorgenti (come descritto in " Installazione di Nokogiri "), l'errore rimane lo stesso.

Quando si tenta di eseguire l'installazione per Nokogiri, libxml2 e libxslt sembrano trovarsi bene, ma non libiconv.

Chiunque abbia una migliore conoscenza di queste cose sa come installare Nokogiri?


Non mostri gli esatti comandi che stai cercando di usare, quindi spareremo nel buio cercando di rispondere. Uso sempre gem install nokogiri, ma poi utilizzo RVM per gestire le installazioni di Ruby per Mac OS. libxml e libxslt non sono collegati a iconv, quindi ti consiglio di porre la tua domanda su Nokogiri-talk, che è il loro forum di supporto. Non ricordo di aver avuto problemi con iconv durante l'installazione di Nokogiri e ce l'ho su un sacco di macchine.
Tin Man,

1
Nel frattempo ho aperto un biglietto su github: github.com/tenderlove/nokogiri/issues/442 che contiene un po 'più di informazioni.
polarblau,

2
Ecco un link per risolvere lo stesso problema su OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri". Non usare sudoper installare gemme o modificare il Ruby predefinito. Utilizzare invece rbenv o RVM per gestire un Ruby separato. Questo è coperto più volte su StackTranslate.it.
Tin Man,

Hai provato a disinstallare xz prima dell'installazione di nokogiri?
lifeisfoo,

Risposte:


237

Ho avuto lo stesso problema. Sfortunatamente l '" Installazione di Nokogiri " non copre i problemi di Iconv. Ecco come ho risolto il problema.

Prima installa homebrew , ti semplifica la vita. Se lo hai già installato, assicurati di prendere le formule più recenti aggiornando in questo modo:

brew update

Nota : in OSX 10.9+ potrebbe essere necessario installare gli strumenti di comando xCode per consentire l'installazione di libiconv.

xcode-select --install

quindi installa una versione più recente di libiconv

brew install libiconv

quindi installa la tua gemma

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

5
Una volta ho eseguito "brew install libiconv" e "brew link libiconv" sono stato in grado di installare nokogiri con successo. Spero che ciò significhi che non ho una forte dipendenza dalla versione specifica di libiconv installata da brew.
Steven Chanin,

87
Quando provo brew install libiconva sputare: Errore: nessuna formula disponibile per libiconv Apple distribuisce libiconv con OS X, lo puoi trovare in / usr / lib. Alcuni script di build non riescono a rilevarlo correttamente, controlla le formule esistenti per le soluzioni.
Seth Bro,

62
Se stai usando Mavericks, potrebbe essere necessario installare gli strumenti della riga di comando di Xcode: xcode-select --install. Questo ha risolto il problema per me.
Michael Stalker,

34
Se non riesci ancora brew install libiconva ottenere la formula giusta, usa questo:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) Non dovevo fare le brewcose; solo il xcode-select --installrisolto questo problema per me.
Bjfletcher,

84

Prova a utilizzare le librerie di sistema. OSX viene fornito con libiconv nelle versioni più recenti, ma lo script di installazione predefinito sembra avere un problema

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

Modifica: se si utilizza il bundler, come indicato da Geoff, è possibile effettuare:

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

5
Se si utilizza bundler - è possibile eseguire "bundle config build.nokogiri --use-system-libraries"
Geoff Evason,

1
alla fine il "bundle config build.nokogiri --use-system-libraries" ha funzionato. Odio quando succede
nils petersohn,

1
Ha funzionato per me su Mac OS 10.10 Yosemite.
Lloyd Dewolf,

perché ho bisogno dell'ulteriore "-" nel mezzo del comando di installazione gem?
Rembrandt Q. Einstein,

3
Non riuscito per me il 10.10.3. Xcode 6.3 con libxml2 version 2.6.21 or later is required!.
Rivera,

36

La soluzione di @ Cory contiene la risposta corretta, ma la soluzione su Mavericks è in realtà molto più semplice della soluzione migliore, quindi sto ripubblicando con solo i passaggi necessari.

Su Mavericks (OSX 10.9+):

Installa gli strumenti da riga di comando Xcode:

xcode-select --install

quindi installa la tua gemma:

gem install nokogiri

4
Funziona su Yosemite. Sono contento di averlo fatto scorrere verso il basso e di non aver usato risposte più vecchie.
yuяi

enorme risparmio di tempo, grazie per questo suggerimento! ha funzionato un incanto per me sui maverick
gelato il

Hai provato a usare la mia soluzione? Non richiede l'inserimento di xcode.
Filip Kis,

Questa è la soluzione ufficiale dai documenti di Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) e l'unica che ha funzionato su El Capitan. La soluzione accettata non ha funzionato lì.
Johannes,

Ha lavorato per me su El Capitan, così esasperante. Grazie per il link ai documenti di Nokogiri @Johannes - davvero utile. Tutti dovrebbero stare alla larga dalle soluzioni che dicono di "usare le librerie di sistema" - cattivi consigli.
Polsonby,

19

Finalmente sono stato in grado di risolvere questo problema. Nessuna delle soluzioni di cui sopra l'ha risolta completamente per me.

Ho riscontrato questo errore durante il tentativo gem install nokogirisu OSX Lion 10.7.2. Prima di tutto, questo errore maschera il vero problema dicendo che manca libiconv, perché otterrai lo stesso errore anche se nokogiri non riesce a trovare libxslt o libxml2, che nel mio caso non poteva.

Quindi ho seguito le istruzioni su http://nokogiri.org/tutorials/installing_nokogiri.html nella sezione Homebrew (leggermente modificato per tenere conto di una versione più aggiornata di 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

A questo punto ho seguito le indicazioni sul sito di Nokogiri e ho provato

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

Tuttavia, questo non è riuscito perché quando si crea libxslt dal sorgente, installa la /includecartella in un posto funky. Quindi è necessario specificare le cartelle libe includeseparatamente in questo modo:

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

Non funzionava ancora (stesso errore di libiconv), quindi ho provato a specificare tutte e tre le librerie richieste (libxslt, libxml2 e 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

Ora ho un errore diverso! Era ancora un errore ma almeno era diverso. Il processo di creazione non è riuscito 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

Cosa? Dopo molte ricerche su google, mi sono imbattuto in questo post miracoloso: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -architettura/

Apparentemente OSX Lion viene fornito con alcune versioni non valide della libreria libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) e devono essere sostituite con le ultime versioni dell'SDK Xcode. L'articolo lo spiega meglio di quanto io possa leggere il link sopra per istruzioni specifiche.

Una volta che questi sono stati sostituiti, ho corso

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

di nuovo e tutto andava bene. Spero che questo aiuti qualcun'altro.


Ho avuto lo stesso problema, ma ho scoperto che rimuovere i seguenti file da opt / local / lib: libz.dylib e libz.1.dylib e seguire il resto di queste istruzioni ha funzionato.
Disdetta il

1
Penso che / opt / local sia un'installazione di MacPorts. Se esegui homebrew e Macports, finirai con un po 'di funkiness (come visto nel tuo caso). La soluzione migliore è disinstallare Macports e usare homebrew per il gestore dei pacchetti.
Cory,

Di seguito ho aggiunto una nuova soluzione più semplice per Mavericks (OSX 10.9+).
Micah Winkelspecht,

17

Sto solo aggiungendo la mia voce alla folla, ma mkmf.log ha detto qualcosa sul fatto di non poter trovare simboli per l'architettura x86_64. Mi sono imbattuto in questa soluzione:

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

Potrebbe non risolvere nulla per il richiedente originale, ma questo può aiutare qualcuno.

Nota a margine: nokogiri è stata la mia più alta barriera all'utilizzo di applicazioni di rubini. Ogni volta che qualcuno dipende da una versione diversa devo capire come costruirla. E il mio problema è diverso ogni volta.


1
D'accordo con il tuo sentimento di nokogiri. Ogni. Singolo. Tempo.
jbnunn,

Non ha funzionato per me in questo modulo, ma ha ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesfunzionato ...
bebee

Questo ha funzionato anche per me, soluzione molto più semplice, non ho usato gli ARCHFLAG, solo sudo gem install nokogiri - --use-system-libraries
ryudice

8

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

questo ha funzionato per me su macos. Funziona anche con la versione1.6.6.4


Ha funzionato senza l' --with-xml2-includeopzione per me su Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
Ryanc,

6

Sto usando .. OS X 10.9.4 Homebrew 0.9.4

Ecco la mia sintesi da questo thread per installare con successo nokogiri, riparando libiconv mancante.

Installa Homebrew http://brew.sh/ O aggiorna all'ultima versione utilizzando il comando seguente

brew update

Installa libxml2 libxslt

brew install libxml2 libxslt

Collega entrambi libxml2 libxslt

brew link libxml2 libxslt

Se ricevi un avviso per usare --force, usa il comando qui sotto

brew link --force libxml2 libxslt

Installa gli strumenti di comando xCode per consentirti di installare libiconv

xcode-select --install

Installa 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

Passaggio finale, installa 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

Ho risolto questo su Yosemiteesecuzione Ruby 2.1.4dal

  1. assicurati di aver installato xCode 6.1, quindi
  2. xcode-select --install, poi
  3. Nell'AppStore fai clic sugli aggiornamenti e installa la versione più recente degli strumenti da riga di comando (che apparentemente xcode-select --installnon funziona - sospira)
  4. poi ha bundle installfunzionato normalmente.

Anch'io l'ho fatto, brew install libiconvma non sono convinto che fosse necessario un passo.


Non credo brew install libiconvsia necessario - non mi sono mai preoccupato di trovare il pacchetto giusto e questo ha funzionato bene per me. Certo, potrebbe essere stato sulla mia macchina da quando ho installato nokogiri con ruby ​​2.1.1 prima.
jmstone617,

"Nell'AppStore fai clic sugli aggiornamenti e installa la versione più recente degli strumenti della riga di comando (che apparentemente xcode-select - install non fa - sospira)" - nessun aggiornamento disponibile. Come posso aggiornare i miei strumenti da riga di comando da Xcode? Non vengono visualizzati nella sezione "Download" del riquadro delle preferenze.
Chadoh,

Questo ha funzionato per me senza andare all'App Store. Ho aggiornato gli strumenti della riga di comando e il sistema operativo (su Yosemite), quindi xcode-select --installho eseguito e sono stato in grado di installare Nokogiri.
acciaio,

Ho dovuto fare: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-libraries .. bundle install
Zack Burt


3

Guardando nel file mkmf, sembra che nokogiri (o gemma, non lo so) cerchi di trovare dipendenze in / op / local /. Per me non è la strada giusta per cercarli.

Costringere nokogiri a trovare le librerie nel posto giusto (io uso l'homebrew) ha fatto il trucco per me:

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

Forse c'è qualcosa da sistemare in nokogiri ...

HTH,


3

libiconv è stato rimosso da Homebrew 0.9 Ora si consiglia di compilare libiconv dal sorgente, quindi fare riferimento all'installazione quando si installa la gem di nokogiri. Vedi le istruzioni di installazione di Nokogiri nella sezione Homebrew 0.9 nella pagina di installazione di Nokogiri


Ad oggi sono stato in grado di eseguire $ brew install libiconv e questo ha scaricato e installato libiconv-1.14.tar.gz
Evolve il

2

Cerca nel file mkmf.log nella directory di creazione della gemma (ad es. /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Questo ha molte più informazioni. Nel mio caso quando ho colpito questo è stato che Nokogiri aggiunge specificamente / opt / local / lib al percorso di ricerca della libreria e GNU Backgammon aveva installato lì un libiconv incompatibile.


2

Supponendo di aver installato libxml2 e libxslt con MacPorts, è possibile che si verifichi ancora questo errore a causa di una mancata corrispondenza dell'ordine dei percorsi di inclusione e dei collegamenti utilizzati dalla chiamata a have_func ('iconv_open', 'iconv.h')

Soluzione semplice (patch): elimina libiconv. * In / usr / local / lib


Ho installato libxml2 e libxslt con MacPorts, ma non ci sono file libiconv. * In / 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/

come sopra, questa è la soluzione per homebrew e l'utilizzo di gem install (applicare le modifiche dipende dalla versione)

tuttavia, se si utilizza Gemfile e l'installazione del bundle, è necessario applicare la configurazione del bundle prima dell'installazione, qui il codice

$ 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

ancora una volta, applicare le modifiche dipende dalla tua versione

spero che questo ti possa aiutare.

credito: https://gist.github.com/1344331


2

Ho avuto problemi simili su Mountain Lion. Ho scoperto che avevo precedentemente installato libiconv tramite il pacchetto rvm e questo non è più necessario per ruby ​​1.9.3 / Mountain Lion / nokogiri.

Seguendo i consigli di https://rvm.io/packages/ , ho cancellato la mia directory $ rvm_path / usr e ricostruito ruby ​​1.9.3. Successivamente l'installazione di nokogiri è stata una semplice installazione di gemme. Nessun pasticcio con installazioni di brew / macports / manuali sorgente!


2

Puoi farlo anche su Mavericks:

gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Applicazioni / Xcode.app / Contenuti / Sviluppatore / Piattaforme / MacOSX.platform / Sviluppatore / SDKs / MacOSX10.9.sdk / usr / include / libxml2

Assicurati solo di aver installato xcode


la stessa soluzione funziona anche per 10.7.5: gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Applicazioni / Xcode.app / Contenuti / Sviluppatore / Piattaforme / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

Stavo combattendo con Nokogiri per un po 'oggi su OS X 10.10 Yosemite

Il mio ambiente era incasinato per qualche motivo.

which bundlee which gemmi stavano dando /usr/bin/bundlee /usr/bin/geminvece di~/.rbenv/shims/gem

Ciò che mi ha aiutato a correggerlo è stato sudo rm -i /usr/bin/gem /usr/bin/bundle

Dopodiché: 1. sono tornato alla mia directory di progetto 2. ho disinstallato i dipendenti 3. (ri) reinstallati i libs dipendenti: ho fatto brew install libxml2 libiconv libxslt 4. ho installato la mia versione ruby ​​nuova (con rbenv) 5. ho fatto gem install bundler 6. ed bundle installeseguito senza alcun i problemi.

Nokogiri andava bene dopo.

Per riferimento:

╰─% 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
Con il senno di poi (che è sempre il 20/20) probabilmente avrei semplicemente modificato la mia variabile env PATH per anteporre prima rbenv.
Sam Figueroa,

1

Devi aggiornare il tuo homebrew a 0.9

quindi seguire questi passaggi

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

Dovresti ricontrollare la versione della libreria di cartelle.


Link e sudo spezzeranno le cose. Sono solo fusti per diversi motivi. Usa le formule della birra perché c'è molto più facile da mantenere. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

UTENTI HOMEBREW

Soluzione corretta per risolvere questo problema se si utilizza homebrew:

xcode-select --install

Scegli "Ottieni Xcode" dalla finestra di dialogo.

brew unlink libiconv
gem install nokogiri

Il passaggio xcode-select corregge l'installazione di Xcode e l'installazione di Xcode Command Line Utils. Ho scoperto che non avevo /usr/include/iconv.h a causa di qualche tipo di problema con gli aggiornamenti O / S o i ripristini dai backup. Se non hai quel file di intestazione e /usr/lib/libconv.dylib dopo aver eseguito xcode-select, molto probabilmente dovrai trascinare Xcode dalla cartella dell'applicazione nel cestino e reinstallare e quindi scaricare manualmente gli strumenti da riga di comando per Xcode da https://developer.apple.com/downloads/index.action e installalo.

Quindi è necessario scollegare libiconv da homebrew. Non hai bisogno di questo. E Clang raccoglierà effettivamente /usr/local/include/iconv.h su /usr/include/iconv.h e #define iconv_open in libiconv_open ma poi collegherà contro /usr/lib/libiconv.dylib che non ha libiconv_open che è ciò che causa gli errori mkmf nel trovare libiconv. Quello che devi fare è rimuovere il collegamento di iconv.h in modo che nokogiri non lo trovi.

Quindi costruisci normalmente nokogiri.

Per i nuovi utenti, tutto ciò che dovresti fare è installare xcode con xcode-select e installare nokogiri, ma se hai trovato questa domanda allora presumibilmente hai un'installazione pasticciata e non una nuova installazione di Mavericks.

Alcune delle altre risposte qui sono decisamente errate. La maggior parte di loro tenta di usare libiconv fuori dall'homebrew, il che è del tutto inutile. Le risposte che brew link libiconvstanno effettivamente causando il problema in cui clang si confonde e cerca di leggere un file di intestazione homebrew e collegarsi alle librerie di sistema. Le risposte che suggeriscono--use-system-libraries sono scarse perché nokogiri deve essere collegato alle sue librerie in bundle libxml2 e libxslt perché altre versioni di quelle librerie sono incompatibili con esso. Le risposte che vogliono compilare da fonti sono irrimediabilmente complicate.

TL; DR:

  • Aggiorna e / o ripara l'installazione di Xcode
  • Scollega il tuo libiconv homebrew dal momento che provando a utilizzare che causa solo problemi
  • Costruisci nokogiri normalmente

UTENTI RVM

Le vecchie installazioni RVM potrebbero avere un libiconv nascosto nelle directory rvm da qualche parte in conflitto con le librerie di sistema. Vedi https://stackoverflow.com/a/11809261/506908 per ulteriori informazioni.

UTENTI MacPorts

Se hai /opt/local/lib/libiconv.dylib, nokogiri aggiunge quel percorso all'elenco delle directory che cerca e troverà l'installazione di MacPorts simile a come raccoglie il libiconv homebrew e è in conflitto con le librerie di sistema. Puoi provare:

sudo port uninstall libiconv

Se ciò non riesce a causa di dipendenze, puoi provare a collegare direttamente la versione di MacPorts (non testata):

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

La conferma gem install nokogiri -- --with-iconv-dir=/opt/localfunziona bene con MacPorts libiconvinstallato
Ordine parziale

1

Questo ha funzionato per me

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


era la combinazione di --use-system-libraries e --with-iconv-dir che lo ha fatto per me
aaaarrgh

0

Mi sono imbattuto in questo, questa mattina ... dopo un aggiornamento a Mavericks. Abbiamo fatto molte cose. Tuttavia, se qualcuno ha questo problema qui ci sono alcune cose da provare.

Ho eseguito 'xcode-select --install' quindi ho installato gli strumenti da riga di comando (sorpreso che questo non si sia aggiornato su ugrade del sistema operativo). Ho eseguito 'rvm implode' (lo ricostruirò più tardi).

Abbiamo messo insieme due file di output degli errori:

~ / .Vagrant.d / gemme / gemme / nokogiri-1.6.3.1 / ext / nokogiri / gem_make.out

~ / .Vagrant.d / gemme / gemme / nokogiri-1.6.3.1 / ext / nokogiri / tmp / x86_64-apple-darwin12.5.0 / porte / libxml2 / 2.8.0 / configure.log

Il che sembrava indicare che il compilatore c stava usando un'impostazione sorprendente.

Ho eseguito "env"

Uscita contenuta:

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

Questi file non esistevano nel file system ...

Dopo tutte queste modifiche, passare a una nuova finestra del terminale (quindi tutto era nuovo). L'installazione di vagrant-berkshelf (che a sua volta installa nokogiri) ha funzionato bene.

NOTA: quando si esegue 'env' nella nuova finestra non c'era più un'impostazione per CC o CXX ...

Non sei sicuro della parte fondamentale di questo, o se l'ordine conta, ma ha cercato di ricreare le parti che sembravano avere un ruolo nel far funzionare questo.


Sei sicuro che il comando abbia gem install nokogiriesito positivo? Appassire con il messaggio "già installato" o un'installazione corretta?
Spundun,

Sì. Ho reinstallato rvm e oh-my-zsh mentre eseguo il backup delle cose sul mio Mac. Quello che non sono stato in grado di capire è come installare nokogiri su un gemset rvm. Quando torno a "rvm use system", posso installare nokogiri 1.6.3.1 sopra la 1.5.6 fornita con OS X ruby ​​2.0.0p451.
Aaron Blythe

Alla fine per me è stato stackoverflow.com/questions/19643153/… brew uninstall apple-gcc42 brew install apple-gcc42
aaron blythe

0

Secondo la documentazione, a partire da OSX 10.9 e Homebrew 9.5+, probabilmente mancano gli strumenti di sviluppo.

Installazione di Nokogiri

Risoluzione dei problemi

Se hai problemi a menzionare la mancanza di libiconv che assomiglia a questo:

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 ***

Quindi probabilmente ti mancano gli strumenti di sviluppo giusti. Questa è una soluzione davvero semplice:

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

Questo è verificato funzionando su OSX 10.9 con il compilatore clang di xcode.


0

Ho riscontrato questo problema quando ho aggiornato il mio Mac OS a Yosemite. Sono stato in grado di risolvere questo problema facendo:

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

0

Ho avuto un problema simile e la risposta accettata ha funzionato per me. Ora, tuttavia, ho visto un nuovo messaggio di errore in cui gmkdirmanca un comando come in questa domanda:

gem install nokogiri -v '1.5.11' non riuscito a causa di: / usr / local / bin / gmkdir: nessun file o directory

Quello che ha funzionato per me è stato prima un po 'di pulizia:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

E poi brew unlink libiconve tutto il resto che devi scollegare (controllare con brew doctor). Quindi, le due linee magiche (copiate dalla risposta collegata):

brew install coreutils
gem install nokogiri

0

Semplici passi da seguire prima di iniziare a disinstallare e installare qualsiasi cosa. Verifica se hai CLT (strumenti da riga di comando installati):

brew config

vedere qui la versione CLT se installata non necessita di reinstallazione.

Questo significa che il problema è con l'autorizzazione che hai reinstallato solo il gemma del bundler non è sudo. Disinstallare il bundler con gem uninstall bundler reinstallare gem bundler gem install bundler

Il punto più importante qui è l'autorizzazione con cui è installato il bundler gem che non dovrebbe mai essere annullato.


-1

Prima di tutto assicurati di seguire la guida all'installazione su nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Dopo aver seguito la guida avevo ancora questo problema. Ecco come l'ho risolto:

Prima di tutto ho installato iconv usando homebrew: brew install iconv

Quindi ho disinstallato ruby, per fortuna questo è molto facile con rvm:

rvm uninstall 1.9.2        

Quindi ho dovuto reinstallare Ruby con le seguenti opzioni:

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

Quindi creo un gemset con la nuova versione ruby:

rvm use 1.9.2@coolproject

Quindi posso finalmente installare nokogiri in questo modo:

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

Nel mio caso (come con scotchi) la compilazione non è riuscita a causa di una libreria iconv incompatibile in / opt / local / lib. Per impostazione predefinita, il processo di creazione di Nokogiri esamina prima / opt / local. Per forzarlo ad usare una directory di installazione diversa, ad esempio / usr / local, eseguire:

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

Questo post sul blog propone di installare libiconv manualmente.

Successivamente, nokogiri può essere installato con una serie di switch che gli dicono dove trovare libiconv (vedi il post sul blog).

Come nota a margine: dopo aver installato nokogiri, sono riuscito a installare gollum (la cui installazione non è riuscita perché non è stato possibile trovare iconv). Ora sto ancora affrontando problemi, perché quando avvio gollum, Python si arresta in modo anomalo.


-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*

NOTA IL MANCANTE file /lib/iconv/iconv.so in 2.0.0-p247 presente nell'installazione gemme 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'

Copia il file sopra

$ 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/

ORA FUNZIONA!

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

Nota: sto lavorando con rbenv, ma questo problema è specifico dell'installazione gem e dovrebbe essere risolto in streaming!
Darren Weber,

questa risposta non ha nulla a che fare con la libreria C libiconv da cui dipende la costruzione di nokogiri. la risposta dovrebbe davvero essere rimossa.
Lamont,

-1

Ho dovuto installare gcc prima di correre ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

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.