Warum schlägt die Installation von Nokogiri unter Mac OS fehl, wenn libiconv fehlt?


159

Ich habe versucht, Nokogiri unter Mac OS 10.9.3 zu installieren, und was auch immer ich versuche, die Installation schlägt am Ende mit der folgenden Fehlermeldung fehl:

$ 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

Nachdem Sie viele Hilfen im Internet befolgt haben, einschließlich des Erstellens und Installierens von libxml2 und libxslt mithilfe von Brew und des Erstellens von libiconv aus den Quellen (wie unter " Installieren von Nokogiri " beschrieben), bleibt der Fehler derselbe.

Beim Versuch, die Installation für Nokogiri auszuführen, scheinen libxml2 und libxslt in Ordnung zu sein, nicht jedoch libiconv.

Wer diese Dinge besser kennt, weiß, wie man Nokogiri installiert?


Sie zeigen nicht die genauen Befehle an, die Sie verwenden möchten, daher werden wir im Dunkeln schießen und versuchen zu antworten. Ich verwende immer gem install nokogiriRVM, aber dann verwende ich RVM, um meine Mac OS Ruby-Installationen zu verwalten. libxml und libxslt haben nichts mit iconv zu tun, daher würde ich empfehlen, Ihre Frage zu Nokogiri-talk zu stellen, dem Support-Forum. Ich erinnere mich nicht, dass ich bei der Installation von Nokogiri irgendwelche Iconv-Probleme hatte, und ich habe sie auf einer Reihe von Computern.
der Blechmann

1
Ich habe in der Zwischenzeit ein Ticket bei github geöffnet: github.com/tenderlove/nokogiri/issues/442, das ein bisschen mehr Informationen enthält.
Polarblau

2
Hier ist ein Link, um das gleiche Problem unter OSX El Capitan zu lösen, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri". Verwenden Sie sudodiese Option nicht , um Edelsteine ​​zu installieren oder den Standard-Ruby zu ändern. Verwenden Sie stattdessen rbenv oder RVM, um einen separaten Ruby zu verwalten. Dies wird beim Stapelüberlauf mehrmals behandelt.
der Blechmann

Haben Sie versucht, xz vor der Installation von nokogiri zu deinstallieren ?
Lifeisfoo

Antworten:


237

Ich hatte das gleiche Problem. Leider behandelt die " Installation von Nokogiri " keine Iconv-Probleme. So habe ich das Problem behoben.

Installieren Sie zuerst Homebrew , es wird Ihnen das Leben leichter machen. Wenn Sie es bereits installiert haben, stellen Sie sicher, dass Sie die neuesten Formeln herunterladen, indem Sie es wie folgt aktualisieren:

brew update

Hinweis : In OSX 10.9+ müssen Sie möglicherweise xCode-Befehlstools installieren, damit Sie libiconv installieren können.

xcode-select --install

Installieren Sie dann eine neuere Version von libiconv

brew install libiconv

Dann installiere deinen Edelstein

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

5
Nachdem ich die "Brew Install Libiconv" und "Brew Link Libiconv" durchgeführt hatte, konnte ich Nokiaogiri erfolgreich installieren. Ich hoffe, das bedeutet, dass ich keine feste Abhängigkeit von der spezifischen Version von libiconv habe, die von Brew installiert wurde.
Steven Chanin

87
Wenn ich versuche, brew install libiconves auszuspucken
Seth Bro

62
Wenn Sie Mavericks ausführen, müssen Sie möglicherweise die Befehlszeilentools von Xcode installieren : xcode-select --install. Dies hat das Problem für mich behoben.
Michael Stalker

34
Wenn Sie immer noch nicht brew install libiconvdie richtige Formel finden, verwenden Sie diese:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) Ich musste das brewZeug nicht machen; Nur das hat xcode-select --installdieses Problem für mich behoben.
Bjfletcher

84

Versuchen Sie es mit den Systembibliotheken. OSX wird in neueren Versionen mit libiconv geliefert, aber das Standardinstallationsskript scheint ein Problem zu haben

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

Bearbeiten: Wenn Sie Bundler verwenden, wie von Geoff erwähnt , können Sie Folgendes tun:

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

5
Wenn Sie Bundler verwenden, können Sie "bundle config build.nokogiri --use-system-library" ausführen
Geoff Evason

1
endlich funktionierte das "bundle config build.nokogiri --use-system-library". Ich hasse es, wenn das passiert
nils petersohn

1
Arbeitete für mich unter Mac OS 10.10 Yosemite.
Lloyd Dewolf

Warum brauche ich das zusätzliche "-" in der Mitte des Gem-Installationsbefehls?
Rembrandt Q. Einstein

3
Für mich am 10.10.3 fehlgeschlagen. Xcode 6.3 mit libxml2 version 2.6.21 or later is required!.
Rivera

36

@ Corys Lösung enthält die richtige Antwort, aber die Lösung für Mavericks ist tatsächlich viel einfacher als die Top-Lösung, sodass ich nur mit den erforderlichen Schritten neu poste.

Auf Mavericks (OSX 10.9+):

Installieren Sie die Xcode-Befehlszeilentools:

xcode-select --install

Dann installiere deinen Edelstein:

gem install nokogiri

4
Arbeitet an Yosemite. Ich bin so froh, dass ich nach unten gescrollt habe und keine älteren Antworten verwendet habe.
Yuяi

Riesige Zeitersparnis, danke für diesen Tipp! arbeitete einen Zauber für mich auf Außenseiter
Eis

Haben Sie versucht, meine Lösung zu verwenden? Es ist keine Xcode-Installation erforderlich.
Filip Kis

Dies ist die offizielle Lösung aus den Nokogiri-Dokumenten ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) und die einzige, die an El Capitan funktioniert hat. Die akzeptierte Lösung hat dort nicht funktioniert.
Johannes

Arbeitete für mich an El Capitan, so wütend. Vielen Dank für den Link zu Nokogiri docs @Johannes - wirklich nützlich. Jeder sollte sich von Lösungen fernhalten, die besagen, "Systembibliotheken verwenden" - schlechte Ratschläge.
Polsonby

19

Ich konnte dieses Problem endlich lösen. Keine der oben genannten Lösungen hat es für mich vollständig behoben.

Ich habe diesen Fehler beim Versuch gem install nokogiriunter OSX Lion 10.7.2 erhalten. Zuallererst maskiert dieser Fehler das eigentliche Problem, indem er sagt, dass libiconv fehlt, da Sie den gleichen Fehler erhalten, selbst wenn nokogiri libxslt oder libxml2 nicht finden kann, was in meinem Fall nicht möglich war.

Also habe ich die Anweisungen auf http://nokogiri.org/tutorials/installing_nokogiri.html im Abschnitt Homebrew befolgt (leicht modifiziert, um eine aktuellere Version von libxml2 zu berücksichtigen):

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

Zu diesem Zeitpunkt folgte ich den Anweisungen auf der Nokogiri-Website und versuchte es

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

Dies schlug jedoch immer noch fehl, da beim Erstellen von libxslt aus dem Quellcode der /includeOrdner an einem unkonventionellen Ort installiert wird . So müssen Sie die angeben libund includeOrdner separat wie folgt:

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

Dies funktionierte immer noch nicht (gleicher libiconv-Fehler), daher habe ich versucht, alle drei erforderlichen Bibliotheken (libxslt, libxml2 und libiconv) anzugeben:

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

Jetzt habe ich einen anderen Fehler! Es war immer noch ein Fehler, aber zumindest war es anders. Der Erstellungsprozess schlug fehl mit:

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

Ähh, was? Nach langem googeln bin ich auf diesen Wunderbeitrag gestoßen: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -die Architektur/

Anscheinend wird OSX Lion mit einigen fehlerhaften Versionen der libz-Bibliothek ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) ausgeliefert und muss durch die neuesten Versionen aus dem Xcode SDK ersetzt werden. Der Artikel erklärt es besser als ich kann, also lesen Sie den obigen Link für spezifische Anweisungen.

Sobald diese ersetzt wurden, rannte ich

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

wieder und alles war gut. Ich hoffe das hilft jemand anderem.


Ich hatte das gleiche Problem, aber ich fand, dass das Entfernen der folgenden Dateien aus opt / local / lib: libz.dylib und libz.1.dylib und das Befolgen der restlichen Anweisungen den Trick machten.
Undistraction

1
Ich denke, / opt / local bezeichnet eine MacPorts-Installation. Wenn Sie Homebrew und Macports verwenden, werden Sie am Ende etwas Funky haben (wie in Ihrem Fall zu sehen). Die beste Lösung besteht darin, Macports zu deinstallieren und Homebrew für Ihren Paketmanager zu verwenden.
Cory

Ich habe unten eine neue einfachere Lösung für Mavericks (OSX 10.9+) hinzugefügt.
Micah Winkelspecht

17

Ich habe nur meine Stimme der Menge hinzugefügt, aber mkmf.log hat etwas darüber gesagt, dass ich keine Symbole für die x86_64-Architektur finden kann. Ich bin über diese Lösung gestolpert:

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

Kann nichts für den ursprünglichen Fragesteller lösen, aber dies kann jemandem helfen.

Randnotiz: Nokiaogiri war meine größte Hürde für die Verwendung von Rubinanwendungen. Jedes Mal, wenn jemand von einer anderen Version abhängt, muss ich herausfinden, wie man sie erstellt. Und mein Problem ist jedes Mal anders.


1
Stimmte mit Ihrem Nokogiri-Gefühl überein. Jeden. Single. Zeit.
Jbnunn

Hat in dieser Form nicht für mich funktioniert, hat aber ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesfunktioniert ...
bwoebi

Dies funktionierte auch für mich, viel einfachere Lösung, ich habe die ARCHFLAGS nicht verwendet, nur sudo gem install nokogiri - --use-system-
library

8

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

Das hat bei mir auf Macos funktioniert. Es funktioniert auch mit Version1.6.6.4


Arbeitete ohne die --with-xml2-includeOption für mich auf Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
Ryanc

6

Ich benutze .. OS X 10.9.4 Homebrew 0.9.4

Hier ist mein Sommer von diesem Thread, um nokogiri erfolgreich zu installieren und fehlende libiconv zu beheben.

Installieren Sie Homebrew http://brew.sh/ oder aktualisieren Sie es mit dem folgenden Befehl auf den neuesten Stand

brew update

Installieren Sie libxml2 libxslt

brew install libxml2 libxslt

Verknüpfen Sie beide libxml2 libxslt

brew link libxml2 libxslt

Wenn Sie eine Warnung zur Verwendung von --force erhalten, verwenden Sie einfach den folgenden Befehl

brew link --force libxml2 libxslt

Installieren Sie die xCode-Befehlstools, damit Sie libiconv installieren können

xcode-select --install

Installieren Sie 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

Letzter Schritt, installieren Sie 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

Ich löste dies auf YosemiteLaufen Ruby 2.1.4durch

  1. Stellen Sie dann sicher, dass Sie xCode 6.1 installiert haben
  2. xcode-select --install, dann
  3. Klicken Sie im AppStore auf Updates und installieren Sie die neueste Version der Befehlszeilentools (was anscheinend xcode-select --installnicht funktioniert - seufz)
  4. dann bundle installwie gewohnt gearbeitet.

Ich habe auch eine gemacht, brew install libiconvaber ich bin nicht überzeugt, dass ein Schritt nötig war.


Ich glaube nicht, dass brew install libiconves notwendig ist - ich habe mich nie darum gekümmert, das richtige Paket zu finden, und das hat für mich gut funktioniert. Zugegeben, es war möglicherweise auf meinem Computer, als ich zuvor nokogiri mit Ruby 2.1.1 installiert habe.
jmstone617

"Klicken Sie im AppStore auf Updates und installieren Sie die neueste Version der Befehlszeilentools (was anscheinend xcode-select --install nicht tut - seufz)" - es sind keine Updates verfügbar. Wie aktualisiere ich meine Befehlszeilentools von Xcode? Sie werden nicht im Abschnitt "Downloads" des Einstellungsbereichs angezeigt.
Chadoh

Das hat bei mir funktioniert, ohne in den App Store zu gehen. Ich habe die Befehlszeilentools und das Betriebssystem (auf Yosemite) aktualisiert, dann ausgeführt xcode-select --installund konnte Nokogiri installieren.
Stahl

Ich musste tun: xcode-select --install .. Brew install libxml2 .. Bundle-Konfiguration build.nokogiri --use-System-Bibliotheken .. Bundle-Installation
Zack Burt


3

Wenn man in die mkmf-Datei schaut, scheint es, dass Nokia (oder Edelstein, ich weiß nicht) versucht, Abhängigkeiten in / op / local / zu finden. Für mich ist es nicht der richtige Weg, sie zu suchen.

Nokogiri zu zwingen, die Bibliotheken am richtigen Ort zu finden (ich benutze Homebrew), hat den Trick für mich getan:

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

Vielleicht gibt es in Nokia etwas zu reparieren ...

HTH,


3

libiconv wurde aus Homebrew 0.9 entfernt. Nun wird empfohlen, libiconv aus dem Quellcode zu kompilieren und dann auf die Installation zu verweisen, wenn Sie das nokogiri-Juwel installieren. Weitere Informationen finden Sie in den Installationsanweisungen für Nokogiri im Abschnitt Homebrew 0.9 auf der Installationsseite für Nokogiri


Ab heute konnte ich $ Brew install libiconv ausführen und es hat libiconv-1.14.tar.gz
Evolve

2

Suchen Sie in der Datei mkmf.log im Build-Verzeichnis des Gems (z. B. /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Das hat viel mehr Infos. In meinem Fall, als ich dies traf, fügte Nokogiri dem Suchpfad der Bibliothek speziell / opt / local / lib hinzu, und GNU Backgammon hatte dort ein inkompatibles libiconv installiert.


2

Angenommen, Sie haben libxml2 und libxslt mit MacPorts installiert, wird dieser Fehler möglicherweise immer noch angezeigt, da die Reihenfolge der Include-Pfade und Link-Pfade, die vom Aufruf von have_func ('iconv_open', 'iconv.h') verwendet werden, nicht übereinstimmt.

Einfache (Patch-) Lösung: Löschen Sie libiconv. * In / usr / local / lib


Ich habe libxml2 und libxslt mit MacPorts installiert, aber es gibt keine libiconv. * -Dateien 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/

Wie oben ist dies die Lösung für Homebrew und die Verwendung von gem install (das Anwenden von Änderungen hängt von Ihrer Version ab.)

Wenn Sie jedoch Gemfile und die Bundle-Installation verwenden, sollten Sie vor der Installation die Bundle-Konfiguration anwenden, hier den Code

$ 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

Auch hier hängt das Anwenden von Änderungen von Ihrer Version ab

hoffe das wird dir helfen.

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


2

Ich hatte ähnliche Probleme mit Mountain Lion. Es stellte sich heraus, dass ich libiconv zuvor über ein RVM-Paket installiert hatte und dies für Ruby 1.9.3 / Mountain Lion / Nokiaogiri nicht mehr erforderlich ist.

Auf Anraten von https://rvm.io/packages/ habe ich mein Verzeichnis $ rvm_path / usr gelöscht und Ruby 1.9.3 neu erstellt. Danach war die Installation von nokogiri eine einfache Edelsteininstallation. Kein Durcheinander mit Brew / Macports / manuellen Quellinstallationen!


2

Sie können dies auch bei Mavericks tun:

gem install nokogiri - --use-system-library = true --with-xml2-include = / Anwendungen / Xcode.app / Inhalt / Entwickler / Plattformen / MacOSX.platform / Entwickler / SDKs / MacOSX10.9.sdk / usr / include / libxml2

Stellen Sie einfach sicher, dass Sie xcode installiert haben


Die gleiche Lösung funktioniert auch für 10.7.5: gem install nokogiri - --use-system-library = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
Tolginho

2

Ich habe heute eine Weile mit Nokogiri unter OS X 10.10 Yosemite gekämpft

Meine Umgebung war aus irgendeinem Grund durcheinander.

which bundleund which gemgaben mir /usr/bin/bundleund /usr/bin/gemstatt~/.rbenv/shims/gem

Was mir geholfen hat, es zu korrigieren, war sudo rm -i /usr/bin/gem /usr/bin/bundle

Danach habe ich: 1. wieder in mein Projektverzeichnis gewechselt 2. die abhängigen Bibliotheken deinstalliert 3. die abhängigen Bibliotheken (neu) installiert: habe eine brew install libxml2 libiconv libxslt 4. meine Ruby-Version frisch installiert (mit rbenv) 5. habe gem install bundler 6. und bundle installlief ohne Probleme.

Nokogiri war danach in Ordnung.

Als Referenz:

╰─% 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
Im Nachhinein (das ist immer 20/20) hätte ich wahrscheinlich gerade meine PATH env-Variable anpassen können, um zuerst rbenv voranzustellen.
Sam Figueroa

1

Sie müssen Ihr Homebrew auf 0,9 aktualisieren

Befolgen Sie dann diese Schritte

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

Sie sollten die Version der Ordnerbibliothek überprüfen.


Link und Sudo werden die Dinge kaputt machen. Sie sind aus mehreren Gründen nur Fass. Verwenden Sie Brühformeln, da diese leichter zu pflegen sind. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

HOMEBREW-BENUTZER

Richtige Lösung, um dieses Problem zu beheben, wenn Sie Homebrew verwenden:

xcode-select --install

Wählen Sie "Get Xcode" aus dem Dialogfeld.

brew unlink libiconv
gem install nokogiri

Der Schritt xcode-select behebt Ihre Xcode-Installation und die Installation der Xcode Command Line Utils. Ich habe festgestellt, dass ich /usr/include/iconv.h aufgrund eines Problems mit O / S-Upgrades oder Wiederherstellungen von Backups nicht hatte. Wenn Sie diese Header-Datei und /usr/lib/libconv.dylib nach dem Ausführen von xcode-select nicht haben, müssen Sie Xcode höchstwahrscheinlich aus dem Anwendungsordner in den Papierkorb ziehen und neu installieren und dann die Befehlszeilentools für Xcode manuell herunterladen von https://developer.apple.com/downloads/index.action und installieren Sie das.

Dann müssen Sie die Verknüpfung der libiconv von Homebrew trennen. Das brauchst du nicht. Und clang nimmt tatsächlich /usr/local/include/iconv.h über /usr/include/iconv.h auf und definiert #defv iconv_open zu libiconv_open, verlinkt dann aber gegen /usr/lib/libiconv.dylib, das nicht über libiconv_open verfügt Dies führt dazu, dass die mkmf-Fehler libiconv finden. Was Sie tun müssen, ist die Verknüpfung von iconv.h zu entfernen, damit nokogiri sie nicht findet.

Dann bauen Sie einfach normal nokogiri.

Für neue Benutzer müssen Sie lediglich xcode mit xcode-select installieren und nokogiri installieren. Wenn Sie diese Frage gefunden haben, haben Sie vermutlich eine verpfuschte Installation und keine Neuinstallation von Mavericks.

Einige der anderen Antworten hier sind definitiv falsch. Die meisten von ihnen versuchen, libiconv aus Homebrew heraus zu verwenden, was völlig unnötig ist. Die Antworten, brew link libiconvdie tatsächlich das Problem verursachen, bei dem Klirren verwirrt wird und versucht, eine Homebrew-Header-Datei zu lesen und mit den Systembibliotheken zu verknüpfen. Die Antworten, die darauf hindeuten, --use-system-librariessind schlecht, da nokogiri mit den gebündelten Bibliotheken libxml2 und libxslt verknüpft werden muss, da andere Versionen dieser Bibliotheken nicht damit kompatibel sind. Die Antworten, die Sie aus Quellen zusammenstellen sollen, sind einfach hoffnungslos zu kompliziert.

TL; DR:

  • Aktualisieren und / oder reparieren Sie Ihre Xcode-Installation
  • Trennen Sie die Verknüpfung Ihres Homebrew-Libiconv, da der Versuch, dies zu verwenden, nur Probleme verursacht
  • Baue nokogiri normal

RVM-BENUTZER

Bei alten RVM-Installationen versteckt sich möglicherweise ein libiconv in Ihren rvm-Verzeichnissen, die mit Ihren Systembibliotheken in Konflikt stehen. Weitere Informationen finden Sie unter https://stackoverflow.com/a/11809261/506908 .

MacPorts BENUTZER

Wenn Sie über /opt/local/lib/libiconv.dylib verfügen, fügt nokogiri diesen Pfad zur Liste der Verzeichnisse hinzu, nach denen gesucht wird, und findet die MacPorts-Installation ähnlich wie die Homebrew-Libiconv und Konflikte mit den Systembibliotheken. Du kannst es versuchen:

sudo port uninstall libiconv

Wenn dies aufgrund von Abhängigkeiten fehlschlägt, können Sie versuchen, eine direkte Verknüpfung mit der MacPorts-Version herzustellen (nicht getestet):

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

Die Bestätigung gem install nokogiri -- --with-iconv-dir=/opt/localfunktioniert libiconv
einwandfrei

1

Dieser hat für mich gearbeitet

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


Es war die Kombination aus --use-system-library und --with-iconv-dir, die es für mich
getan

0

Ich bin heute Morgen darauf gestoßen ... nach einem Upgrade auf Mavericks. Wir haben viele Dinge getan. Wenn jedoch jemand dieses Problem hat, sollten Sie einige Dinge ausprobieren.

Ich habe 'xcode-select --install' ausgeführt und dann die Befehlszeilentools installiert (überrascht, dass dies auf dem Betriebssystem ugrade nicht aktualisiert wurde). Ich habe 'rvm implode' ausgeführt (ich werde es später wieder aufbauen).

Wir haben zwei Fehlerausgabedateien zusammengesetzt:

~ / .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

Dies schien darauf hinzudeuten, dass der c-Compiler eine überraschende Einstellung verwendete.

Ich lief 'env'

Ausgabe enthalten:

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

Diese Dateien waren im Dateisystem nicht vorhanden ...

Nach all diesen Änderungen wurde in ein neues Terminalfenster gewechselt (also war alles frisch). Die Installation von Vagrant-Berkshelf (das wiederum Nokogiri installiert) hat gut funktioniert.

HINWEIS: Beim Ausführen von 'env' im neuen Fenster gab es keine Einstellung mehr für CC oder CXX ...

Unsicher in Bezug auf den Schlüsselteil oder ob die Reihenfolge wichtig ist, aber versucht, die Teile neu zu erstellen, die eine Rolle dabei zu spielen schienen, damit dies funktioniert.


Sind Sie sicher, dass der Befehl gem install nokogirierfolgreich ist? Widerrist mit der Meldung "bereits installiert" oder einer erfolgreichen Installation?
Spundun

Ja. Ich habe rvm und oh-my-zsh neu installiert, während ich die Dinge wieder auf meinem Mac aufbaue. Was ich nicht herausfinden konnte, ist, wie man Nokogiri auf einem RVM-Gemset installiert. Wenn ich wieder zu 'rvm use system' wechsle, kann ich nokogiri 1.6.3.1 über 1.5.6 installieren, das auf OS X ruby ​​2.0.0p451 enthalten ist.
Aaron Blythe

Am Ende war es für mich stackoverflow.com/questions/19643153/… brauen deinstallieren apple-gcc42 brauen installieren apple-gcc42
aaron blythe

0

Laut Dokumentation fehlen Ihnen ab OSX 10.9 und Homebrew 9.5+ wahrscheinlich die Entwicklungstools.

Nokogiri Installation

Fehlerbehebung

Wenn Sie Probleme haben, das Fehlen von libiconv zu erwähnen, sieht das ungefähr so ​​aus:

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

Dann fehlen Ihnen wahrscheinlich die richtigen Entwicklertools. Dies ist eine wirklich einfache Lösung:

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

Dies wird unter Verwendung des Clang-Compilers von OSX 10.9 mit xcode überprüft.


0

Ich habe dieses Problem erhalten, als ich mein Mac OS auf Yosemite aktualisiert habe. Ich konnte dieses Problem lösen, indem ich Folgendes tat:

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

0

Ich hatte ein ähnliches Problem und die akzeptierte Antwort funktionierte für mich. Jetzt habe ich jedoch eine neue Fehlermeldung gesehen, bei der ein gmkdirBefehl wie in dieser Frage fehlt:

gem install nokogiri -v '1.5.11' ist fehlgeschlagen, weil: / usr / local / bin / gmkdir: Keine solche Datei oder kein solches Verzeichnis

Was für mich funktioniert hat, war zuerst eine kleine Bereinigung:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

Und dann brew unlink libiconvund was auch immer Sie sonst brauchen, um die Verbindung zu trennen (überprüfen Sie mit brew doctor). Dann die magischen zwei Zeilen (kopiert aus der verknüpften Antwort):

brew install coreutils
gem install nokogiri

0

Befolgen Sie einfach die Schritte, bevor Sie mit der Deinstallation und Installation beginnen. Überprüfen Sie, ob Sie CLT (Befehlszeilentools installiert) haben:

brew config

Die CLT-Version finden Sie hier, wenn sie installiert ist und keine Neuinstallation erforderlich ist.

Dies bedeutet, dass das Problem mit der Erlaubnis ist, dass Sie nur Bundler Gem neu installieren, machen Sie es nicht sudo. Bundler deinstallieren mit gem uninstall bundler neu installierten Gem Bundler gem install bundler

Der wichtigste Punkt hierbei ist die Erlaubnis, unter der Bundler Gem installiert wird. Es sollte niemals sudoed werden.


-1

Befolgen Sie zunächst die Installationsanleitung für nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Nachdem ich dem Leitfaden gefolgt war, hatte ich immer noch dieses Problem. So habe ich es gelöst:

Zuerst habe ich iconv mit homebrew installiert: Brew install iconv

Dann habe ich Ruby deinstalliert, zum Glück ist das mit rvm sehr einfach:

rvm uninstall 1.9.2        

Dann musste ich Ruby mit den folgenden Optionen neu installieren:

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

Dann erstelle ich ein Gemset mit der neuen Ruby-Version:

rvm use 1.9.2@coolproject

Dann kann ich endlich nokogiri so installieren:

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

In meinem Fall (wie bei Scotchi) ist der Build aufgrund einer inkompatiblen iconv-Bibliothek in / opt / local / lib fehlgeschlagen. Standardmäßig überprüft der Nokiaogiri-Erstellungsprozess zuerst / opt / local. Gehen Sie folgendermaßen vor, um die Verwendung eines anderen Installationsverzeichnisses zu erzwingen, z. B. / usr / local.

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

In diesem Blogbeitrag wird vorgeschlagen, libiconv manuell zu installieren.

Anschließend kann nokogiri mit einer Reihe von Schaltern installiert werden, die angeben, wo sich libiconv befindet (siehe Blog-Beitrag).

Als Randnotiz: Nach der Installation von nokogiri konnte ich gollum installieren (die Installation schlug ebenfalls fehl, da iconv nicht gefunden werden konnte). Jetzt habe ich immer noch Probleme, denn wenn ich Gollum starte, stürzt Python ab.


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

HINWEIS DIE FEHLENDE Datei /lib/iconv/iconv.so in 2.0.0-p247, die in der Edelsteininstallation 2.0.0-p0 vorhanden ist.

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

Kopieren Sie die Datei über

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

JETZT GEHTS!

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

Hinweis: Ich arbeite mit rbenv, aber dieses Problem ist spezifisch für die Gem-Installation und sollte im Upstream behoben werden!
Darren Weber

Diese Antwort hat nichts mit der C libiconv-Bibliothek zu tun, von der nokogiris Build abhängt. Antwort sollte wirklich entfernt werden.
Lamont

-1

Ich musste zuerst gcc installieren, bevor ich laufen konnte ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.