Nokogiri: libiconv fehlt

Erstellt am 3. Apr. 2011  ·  109Kommentare  ·  Quelle: sparklemotion/nokogiri

Wir führen Ruby 1.8.7 (über RVM) auf OS X 10.6.6 aus. Der Versuch, nokogiri 1.4.4 mit Bundler zu installieren, führt immer zu folgendem Fehler:

Installing nokogiri (1.4.4) with native extensions /Users/administrator/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/site_ruby/1.8/rubygems/installer.rb:533:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/Users/administrator/.rvm/rubies/ruby-1.8.7-p302/bin/ruby extconf.rb 
checking for libxml/parser.h... yes
checking for libxslt/xslt.h... yes
checking for libexslt/exslt.h... yes
checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
-----
libiconv is missing.  please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
[…]

Nach den Anweisungen hier im Wiki sowie im Internet haben wir MacPorts verwendet, um libxml2 und libxslt zu installieren, was zu folgender Situation führt:

sudo port install libxml2 libxslt
Password:
Error: Cannot install libxml2 for the arch(s) 'x86_64' because
Error: its dependency libiconv is only installed for the archs 'i386 ppc'.
Error: Unable to execute port: architecture mismatch

Wir haben libxml2 und libxslt aus dem Quellcode gebaut und versucht, sowohl das Juwel mit den Flags für die MacPorts und den Build wie im Wiki beschrieben als auch einige online gefundene Variationen zu installieren. — Das Ergebnis bleibt gleich. Wir haben sogar das Juwel heruntergeladen, extconf.rb geändert, wie hier vorgeschlagen: https://github.com/tenderlove/nokogiri/issues#issue/381 , und es lokal kompiliert, aber das Endergebnis ist dasselbe.

Was fehlt uns? Wir stecken ziemlich fest in dieser Situation.

Alle 109 Kommentare

Ich habe die gleiche Frage gestellt und bekam diese Antwort:

Installieren Sie MacPorts: http://www.macports.org
Fügen Sie /opt/local/bin zu Ihrem PATH hinzu (bashrc oder zshrc oder was auch immer Sie verwenden).
sudo port install libxml2 und sudo port install libxslt
Dann sollte sudo gem install nokogiri --no-rdoc --no-ri ohne Probleme laufen. Das war alles, was ich für das System Ruby (1.8.7 unter OSX 10.6) und 1.9.2 über rvm tun musste.

Ich hatte die gleichen Probleme am 10.6. Ich habe MacPorts neu installiert, port hat libxml2 und libxslt erneut installiert und jetzt treten diese Probleme nicht mehr auf.

Angenommen, Sie haben libxml2 und libxslt mit MacPorts installiert, erhalten Sie diesen Fehler möglicherweise immer noch aufgrund einer Nichtübereinstimmung der Reihenfolge der Include-Pfade und Link-Pfade, die vom Aufruf von have_func('iconv_open', 'iconv.h') verwendet werden.

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

Vorschlag: Lassen Sie extconf.rb eine etwas anspruchsvollere Überprüfung durchführen, welche iconv-Bibliotheken tatsächlich installiert sind, und geben Sie dem Benutzer einen besseren Hinweis. In diesem Fall fehlt libiconv NICHT. Es gibt tatsächlich ZWEI libiconvs, der richtige Header wurde kompiliert und eine alte Bibliothek wurde gelinkt. Scheint ein sehr häufiges Problem zu sein, bei dem die Fehlermeldung der Installationsdatei etwas mehr Hilfe bieten könnte.

Und ich denke, das könnte ein Problem mit mkmf und der Art und Weise sein, wie es mit Bibliothekspfaden umgeht? Die fehlgeschlagene Kompilierungsprüfung für mich war:

```"gcc -o conftest -I. -I/usr/local/lib/ruby/1.8/i686-darwin10.3.0 -I. -III/opt/local/include -III/usr/local/include -III /usr/local/include -III/usr/include -III/usr/include/libxml2 -I/opt/local/include/libxml2 -I/usr/local/include/libxml2 -I/usr/local/include/libxml2 -II/opt/local/include -II/usr/local/include -II/usr/local/include -II/usr/include -II/usr/include/libxml2 -I/opt/local/include -I/usr /local/include -I/usr/local/include -I/usr/include -I/usr/include/libxml2 -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_XOPEN_SOURCE=1 -fno-common -pipe -fno-common -g -DXP_UNIX -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline conftest.c -L. -L/usr/local/lib -L/opt/local/lib -L/usr/local/lib -L /usr/lib -L. -lruby-static -lpthread -ldl -lobjc "
Undefinierte Symbole für Architektur x86_64:
"_libiconv_open", referenziert von:

Note the compile stage starts with /opt/local/include, but the link stage starts with /usr/local/lib, which is where the old version was

Ich benutze Lion und Homebrew. Bei mir hat das geholfen:

brew install libiconv
brew link libiconv

In meinem Fall (Migration zu OS X Lion) habe ich zur Behebung des Problems macports bereinigt:

port -qv installed > myports.txt
sudo port -fp uninstall --follow-dependents installed
sudo port clean all

Weitere Einzelheiten: http://trac.macports.org/wiki/Migration

+1 zu dem, was jfahrenkrug gesagt hat. Die Installationsanleitung auf http://nokogiri.org/tutorials/installing_nokogiri.html , Homebrew-Bereich sollte wahrscheinlich aktualisiert werden;

braue installiere libxml2 libxslt
Link brauen libxml2 libxslt

zu

brauen installieren libxml2 libxslt libiconv
Link brauen libxml2 libxslt libiconv

Der Fix von jfahrenkrug hat auch bei mir funktioniert

+1 funktioniert für mich

Ich habe die Anweisungen zum Erstellen von libxml2 und libxslt aus Brew befolgt. Ich kann Nokogiri nicht bauen.

Ich erhalte eine Fehlermeldung, wenn ich versuche, „brew install libiconv“ auszuführen:

$ brew installiere libiconv
Fehler: Keine verfügbare Formel für libiconv
Apple verteilt libiconv mit OS X, Sie finden es in /usr/lib.
Einige Build-Skripte erkennen es nicht richtig, bitte überprüfen Sie die vorhandenen
Formeln für Lösungen.

Ich bin auf einer frischen Snow Leopard-Installation. Ich würde MacPorts lieber nicht verwenden.

Bitte helfen Sie.

@jseigler Ich verwende Brew 0.8.1 und kann libiconv problemlos installieren. Versuchen Sie, das Gebräu zu aktualisieren?

Ich hatte das gleiche Problem wie @jseigler. Ich verwende Brew 0.9 unter OS X 10.7.3.

Das Herunterladen von libiconv und das manuelle Kompilieren hat funktioniert.
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz

Wenn Sie herausfinden, wie Sie Nokogiri gegen Brew 0.9-Bibliotheken installieren, lassen Sie es mich bitte wissen – ich werde die Installationsdokumentation aktualisieren. In der Zwischenzeit befürchte ich jedoch, dass ich als hauptsächlich Linux-Benutzer keine große Hilfe sein kann.

@tenderlove , irgendwelche Ideen? Du <3 Macs. :) :) :)

Mit Brew 0.9 unter OSX 10.7.3 funktionierte Folgendes:

braue installiere libxml2 libxslt
Link brauen libxml2 libxslt

Installieren Sie libiconv von der Quelle:
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
machen
sudo make install

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

@brennenf

Gute Arbeit. Das hat es mir auch angetan.

Anweisungen, die auf nokogiri.org veröffentlicht wurden:

http://nokogiri.org/tutorials/installing_nokogiri.html#homebrew_09

Danke an alle.

@brennenf Danke für diese Zeile
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/ lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.13.1/include --with-iconv-lib =/usr/local/Cellar/libiconv/1.13.1/lib

@brennenf Ihr Fix bringt mir ein nettes "Nokogiri-1.5.2 erfolgreich installiert", aber wenn ich Bundle Install in meiner Rails-App ausführe, schlägt es immer noch fehl: "Beim Installieren von Nokogiri (1.5.2) ist ein Fehler aufgetreten, und Bundler kann nicht fortgesetzt werden.
Stellen Sie vor dem Bündeln sicher, dass gem install nokogiri -v '1.5.2' erfolgreich ist.“ Hinweis „gem install nokogiri -v '1.5.2“ schlägt ebenfalls fehl.

@ttringas - bitte senden Sie eine E-Mail an nokogiri-talk. Dieses Problem betrifft Nokogiri 1.4.4 und ist seit Monaten geschlossen.

Hallo, gibt es Neuigkeiten zu Mountain Lion?
Ich bekomme die Installation nicht hin.

Ich habe den auf der nokogiri-Installationsseite genannten Pfad aktualisiert:

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

das habe ich im Gegenzug: https://gist.github.com/3186643

@polarblau schau wer jetzt Probleme hat :D (me)

Es könnte helfen, aber es scheint, dass das RVM-Ökosystem nach der Aktualisierung auf Mountain Lion fehlerhaft zu sein scheint. Ich entferne die .rvm und installiere rvm mit http://unfiniti.com/software/mac/jewelrybox/ und jetzt funktioniert es, aber ich habe eine Warnung, die besagt:
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.8

Auch hier hat die Neuinstallation von Ruby den Trick getan (ich bin nicht wirklich überrascht - das ist eine ziemlich häufige Falle).

@polarblau , zu spät! das hab ich schon gelesen ;)

Um die Installation auf meinem neu aktualisierten Mountain Lion zum Laufen zu bringen, musste ich meine zuvor installierten rvm-Pakete (befindet sich in $rvm_path/usr) entfernen, Ruby 1.9.3 neu erstellen und dann war die Gem-Installation von nokogiri erfolgreich. Siehe https://rvm.io/packages/

Ich bin auf Mountain Lion. Die Neuinstallation von Ruby hat bei mir funktioniert.

Suche nach libxml/parser.h ... nein

libxml2 fehlt.

Ich habe festgestellt, dass ein zusätzlicher Schritt erforderlich ist, um das oben Gesagte für Homebrew 0.9 unter Mac OS X 10.8 Mountain Lion zu lösen, und zwar das Erstellen eines „/usr/bin/gcc-4.2“-Links:

braue installiere libxml2 libxslt
Link brauen 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
machen
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.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

brax4444 vielen Dank, du bist ein Lebensretter!! Funktionierte perfekt mit dem Hinzufügen eines sudo zu Ihrem letzten Befehl wegen des Fehlers:

FEHLER: Beim Ausführen von gem ... (Errno::EPERM)
Vorgang nicht erlaubt - ~/.rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest

brax4444 ist der Mann! Danke

Ich frage mich, ob jemand einem Noobie helfen kann:

Ausführen von Mountain Lion 10.8.2 mit Homebrew.

Angefangen mit nokogiri 1.5.2 - fehlte immer das typische libiconv.

Zwischen diesem Thread, speziell Brax4444 und dem Installations-Tutorial auf Nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html für Homebrew .9 bleibt mir die folgende FUBAR:

Ich habe jetzt Nokogiri 1.5.5, wo Rails nach 1.5.2 sucht

Konnte das libiconv-Problem trotz unzähliger Stunden immer noch nicht beheben.

Kann wegen fehlendem Gem keine Rails-Befehle mehr ausführen > nokogiri : 1.5.2

Versuchen Sie, das Gem (das wäre 1.5.5) oder Rails neu zu installieren (ich versuche an dieser Stelle alles ... komme jetzt mit folgendem Fehler zurück: FEHLER: Während der Ausführung von Gem ... (Errno::EPERM)
Vorgang nicht erlaubt - /usr/local/rvm/gems/ruby-1.9.3-p194/gems/nokogiri-1.5.5/.autotest

Kann mich jemand retten? Ich muss bis morgen eine App abgeben.

Hallo!

Danke, dass du diese Frage gestellt hast! Ihre Bitte um Unterstützung bei der Verwendung von Nokogiri wird nicht unbeantwortet bleiben!

Dieses Problem ist jedoch geschlossen, und Nokogiri's Github Issues ist für das Melden von Fehlern oder das Einreichen von Patches reserviert. Wenn Sie Ihre Frage auf der Mailingliste stellen, verspricht Team Nokogiri, dass Ihnen jemand zeitnah eine Antwort geben wird.

Wenn Sie mehr über die Gründe von Team Nokogiri für diese Richtlinie erfahren möchten, gehen Sie bitte zu http://bit.ly/nokohelp.

Vielen Dank für Ihr Verständnis! Und vielen Dank, dass Sie Nokogiri verwenden.

brax4444, vielen Dank, Ihre Schritte haben mir geholfen, ein ähnliches Problem bei der Installation des pg-Gems zu lösen.

Die Anleitungen auf der Seite http://nokogiri.org/tutorials/installing_nokogiri.html sind jetzt veraltet, da Bundles neuere Versionen installieren (derzeit libxml2 bei 2.9.0 und libxslt bei 1.1.28).

@Winstons

Danke für deinen Kommentar, aber dieses Thema ist schon seit einiger Zeit geschlossen.

Wenn Sie ein Update für die nokogiri-Installationsdokumentation haben, können Sie entweder eine Pull-Anfrage senden an:

https://github.com/sparklemotion/nokogiri.org-tutorials

oder Sie können das Problem und die Lösungen (Bundler installiert libxml2 oder libxslt nicht ... meinst du brew? oder mac ports? oder ... ?) in einer neuen Ausgabe klarer darstellen und wir werden es ansprechen, wenn wir können unabhängig bestätigen.

Danke, dass Sie Nokogiri verwenden!

@flavorjones Entschuldigung! Ich werde weggabeln.

Danke, dass Sie Nokogiri mitverfasst haben.

Ich musste auch XCode tatsächlich installieren, damit dies funktioniert.

Ich musste Befehlszeilen-Entwicklertools installieren.

@dentarg Danke, ich hatte das gleiche Problem, nachdem ich meinen Mac wiederhergestellt hatte, wurden die Befehlszeilen-Entwicklertools nicht installiert.
Tun Sie es mit diesem Befehl 'xcode-select --install'

Verwenden Sie https://github.com/Homebrew/homebrew-dupes/blob/master/libiconv.rb

brauen tab homebrew/dupes
braue installiere libiconv

und vielleicht das:
Bundle-Konfiguration build.nokogiri --use-system-libraries

aber keine ahnung ob das geht

Danke @brax4444 , dein Rat hat auch bei mir funktioniert!

Ich habe das native iconv verwendet. Sie müssen libxml2/libxslt nicht verknüpfen.

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

Danke @patricksereno.

Bundle-Konfiguration build.nokogiri --use-system-libraries
das hat bei mir funktioniert

Danke, brax4444! Diese eine Zeile (gcc-Link) hat es auch für mich getan!

SIEHE AKTUALISIERTE ANLEITUNGEN: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550

HINWEIS: Wenn Sie alle diese Posts nacheinander durchgehen und alles versuchen, dann MACHEN SIE ES FALSCH. Alle Ratschläge zum „Brauen von Links“ (einschließlich dieser Posts) sind schlechte Ratschläge. Alle Ratschläge zu "--use-system-libraries" sind auch schlechte Ratschläge. STAAAHHHHP. Zum Ende springen.

ich glaube das hat bei mir funktioniert:

brew tap homebrew/dupes
brew install libiconv
brew link libiconv --force
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local

Der wichtige Punkt hier ist, dass libiconv in /usr/local/include 'gelinkt' werden muss. Mit dem 'Dupes'-Tap wird es darum gehen, eine Systembibliothek zu überschreiben, also müssen Sie es --force tun. Dann müssen Sie nokogiri nur sagen, dass es nach /usr/local suchen soll, um nach dem iconv-Pfad zu suchen, der an die eingebettete libxml2 übergeben wird, wenn es das erstellt. Durch die Verwendung von --use-system-libraries umgehen die Leute die Notwendigkeit, diese Bibliothek zu finden, um sie in den internen libxml2-Build zu übergeben.

Eine Möglichkeit, dies zu beheben, wäre, Homebrew eine pkg-config-Konfiguration für libiconv hinzufügen zu lassen, da die nokogiri extconf.rb sie dann finden kann.

Eine andere Möglichkeit wäre, /usr/local/include hier als Suchpfad fest zu codieren:

https://github.com/sparklemotion/nokogiri/blob/983ff1f2962c7f9fd20a6fc4c18784eccfff21c0/ext/nokogiri/extconf.rb#L132 -L133

Ich habe versucht herauszufinden, wie ich /usr/local/include aus einem Pfad in Rubys mkmf extrahieren kann, und verdammt noch mal, ob ich das herausfinden kann. Die Umleitungsschichten in mkmf sind zu tief. Die Methode find_header() in mkmf kann sicherlich iconv.h finden, aber ich weiß nicht, wie ich die Informationen darüber extrahieren kann, in welchem ​​Pfad sie es findet. Das wäre eigentlich die richtige Lösung für nokogiri, um die Header-Datei darin zu finden genauso wie mkmf die Header-Datei finden kann.

Es scheint, dass die Tatsache, dass nokogiri keine einfache Header-Datei in /usr/local/include finden kann, ohne dass eine externe pkg-config erforderlich ist, defekt ist. Ich kann sehen, wie hässlich das Hartcodieren des Pfads ist, aber ich weiß nicht, wie ich mkmf fragen soll, in welchem ​​​​Verzeichnis find_header den Header findet ...

Es sieht auch so aus, als ob es hier einen Fehler gibt, bei dem dir_config() ein Array von ':'-getrennten Pfaden anstelle eines Arrays von zwei Pfaden zurückgeben kann, aber es scheint keinen Einfluss auf die Behebung dieses Problems zu haben:

https://github.com/sparklemotion/nokogiri/blob/983ff1f2962c7f9fd20a6fc4c18784eccfff21c0/ext/nokogiri/extconf.rb#L126 -L130

@lamont-granquist tolle Anleitung, noch besser wenn du von Tab zu Tap wechselst :-)

@ericbrooke lol, ich habe das von einem früheren Poster kopiert ... jetzt behoben ...

Ich glaube, ich habe jeden in diesem Beitrag erwähnten Befehl ausprobiert und bin immer noch auf diesen gestoßen:

sudo 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-lib=/usr/lib --with-iconv-include=/usr/local/include/
Building native extensions with: '--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-lib=/usr/lib --with-iconv-include=/usr/local/include/'
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.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-lib=/usr/lib --with-iconv-include=/usr/local/include/
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
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.

Ich habe keine Ahnung, warum iconv.h entdeckt wird, aber iconv_open() nicht (es ist in dieser Datei definiert). Ich habe gesehen, dass kürzlich jemand auf genau das gleiche Problem gestoßen ist - http://stackoverflow.com/questions/24735534/nokogiri-install-fails-iconv-doesnt-work-osx

Hat jemand dieses Problem gesehen?

SIEHE AKTUALISIERTE ANLEITUNGEN: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550

@Reinmar kannst du versuchen, was ich vorgeschlagen habe. Bestimmtes:

  1. brew link libiconv --force und bestätigen Sie dann, dass ls -la /usr/local/include/iconv.h vorhanden ist
  2. Überprüfen Sie auch, ob ls -la /usr/local/lib/libiconv.dylib vorhanden ist
  3. dann einfach: gem install nokogiri -- --with-iconv-dir=/usr/local

Alle Pfade, die Sie zu versionierten Verzeichnissen tief im 'Cellar' von Homebrew verwenden, sind irgendwie schrecklich und spröde, und ich bin nicht allzu überrascht, dass es nicht richtig funktioniert.

Ich habe diese Anweisungen http://nokogiri.org/tutorials/installing_nokogiri.html verwendet, sodass die Pfade ähnlich sind (Versionen unterschiedlich).

piotrus<strong i="7">@macus</strong> ~> brew link libiconv --force
Warning: Already linked: /usr/local/Cellar/libiconv/1.14
To relink: brew unlink libiconv && brew link libiconv
piotrus<strong i="8">@macus</strong> ~> ls -la /usr/local/include/iconv.h
lrwxr-xr-x  1 piotrus  admin  39 Jul 29 19:47 /usr/local/include/iconv.h -> ../Cellar/libiconv/1.14/include/iconv.h
piotrus<strong i="9">@macus</strong> ~> ls -la /usr/local/lib/libiconv.dylib
lrwxr-xr-x  1 piotrus  admin  42 Jul 29 19:47 /usr/local/lib/libiconv.dylib -> ../Cellar/libiconv/1.14/lib/libiconv.dylib
piotrus<strong i="10">@macus</strong> ~> gem install nokogiri -- --with-iconv-dir=/usr/local
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
piotrus<strong i="11">@macus</strong> ~> sudo gem install nokogiri -- --with-iconv-dir=/usr/local
Password:
Building native extensions with: '--with-iconv-dir=/usr/local'
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-iconv-dir=/usr/local
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

Vielleicht werde ich versuchen, Ruby/Gem zu aktualisieren... :| Es ist jedoch eine blinde Vermutung.

Ok... Das Aktualisieren gem hat nicht geholfen. Dann, nach der Installation von rvm (aber bevor ich Ruby von 2.0.0 auf 2.1.* aktualisierte), entschied ich mich, das Terminal neu zu starten und wechselte irrtümlicherweise von iterm zum Standard-Terminal und ... die Installation von nokogiri funktionierte mit dem derselbe Befehl, der vorher nicht funktioniert hatte. Also musste ich entweder das Terminal neu starten (obwohl ich zuvor viele Tabs in iterm verwendet habe) oder es war ein Problem, das von xterm verursacht wurde. Keine Ahnung, aber vielleicht hilft es jemandem.

Zusätzlich zur Antwort von @lamont-granquist können Sie die Gem-Installation überspringen, wenn Sie das Bundle verwenden, und Folgendes ausführen:

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

Nachdem Sie die Anweisungen von @lamont-granquist befolgt haben:

brew tap homebrew/dupes
brew install libiconv
brew link libiconv --force
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local

Und als ich auf das gleiche Problem wie @Reinmar stieß , fand ich einen Vorschlag auf StackOverflow und kombinierte ihn mit den anderen Vorschlägen hier, was zu Folgendem führte:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 sudo gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2

Das hat endlich bei mir funktioniert, hoffentlich hilft dir das weiter @Reinmar . Warum das funktioniert, ist mir schleierhaft, _[hier zurückhaltende Kommentare zu Apples geschlossenem Ökosystem]_. Vielen Dank an alle, die Ihre Methoden geteilt haben.

Ich musste Home-Brew rausreißen und alle Brews von Grund auf neu installieren und dann hat es funktioniert

@doublerebel Ich denke, Sie müssen möglicherweise xcode neu installieren und / oder xcode-select verwenden. Was du getan hast, ist sowieso irgendwie verwirrt ...

Es scheint, dass ich mit der aktuellen Version von Homebrew mit einer leicht vereinfachten Version von @lamont-granquist auskommen konnte:

brew tap homebrew/dupes
brew install libiconv
gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local/opt/libiconv

Nein brew link --force libiconv ...

das macht Sinn @jacobvosmaer , die Dokumentation sollte wahrscheinlich aktualisiert werden, um das zu verwenden.

(wahrscheinlich aber die -v 1.6.3.1 löschen)

Ich würde die Dokumentation aktualisieren, aber ich bin gerade mit anderen Codierungen abgelenkt ...

Nach einem ganzen Tag Arbeit an diesem Problem ist es erwähnenswert, dass die obige @doublerebel- Lösung als erstes funktioniert

SIEHE AKTUALISIERTE ANLEITUNGEN: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550

dies könnte für Benutzer mit Xcode 5.1.1 hilfreich sein:

 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

SIEHE AKTUALISIERTE ANLEITUNGEN: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53793550

Außerdem würde ich vorschlagen, sicherzustellen, dass Xcode 5.1.1 installiert ist (und/oder es neu zu installieren) und dann die "Command Line Tools for Xcode" hier neu zu installieren: https://developer.apple.com/downloads/

Dann mach:

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv

Mac OSX-Updates und -Wiederherstellungen scheinen Xcode und Homebrew aus irgendeinem Grund zu zerstören. Ich zeige es auch lieber auf /usr/local/opt/libiconv, als es mit /usr/local/include zu verknüpfen.

@lamont-granquist Danke für deine Lösungen. Ich habe jeden einzelnen angewendet und deins ist das, was endlich für mich funktioniert.

Das Ausführen von 'brew uninstall libxml2 libxslt' und dann 'sudo gem install nokogiri' hat es für mich behoben

Während ich RVM verwendete und ein neues Gem-Set erstellte, musste ich Folgendes tun:

brew uninstall libiconv
brew install libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv

@lamont-granquist Vielen Dank für die Lösung. Hat für mich funktioniert.

@lamont-granquist @ericbrooke danke. das hat es umgebracht.

BEARBEITEN: NOCH EINFACHERE ANWEISUNGEN: https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -54091434

Fügen Sie also die guten Teile aus der Stackoverflow-Frage zu dieser Antwort zusammen:

Führen Sie dies aus, um die neuesten Xcode- und Xcode-Befehlszeilentools zu installieren (wählen Sie im Dialogfeld „Get Xcode“ aus):

sudo xcode-select --install

Dann libiconv in Homebrew aktualisieren:

brew tap homebrew/dupes
brew update
brew uninstall libiconv
brew install libiconv

Dann installieren Sie nokogiri:

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

Das sollte für alle auf 10.9 + Homebrew funktionieren

würde mich über ein Feedback dazu freuen ^^^

hat bei mir funktioniert, danke!

-Chris

Am Do, 28. August 2014 um 16:40 Uhr, lamont-granquist [email protected]
schrieb:

würde mich über ein Feedback dazu freuen ^^^


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/sparklemotion/nokogiri/issues/442#issuecomment -53794057
.

Aus Neugier, wofür ist brew uninstall libiconv ? Bedeutet das, dass Sie bereits irgendwie eine libiconv installiert haben?

@knu ja, es impliziert, dass Sie Mac OsX verwenden und libiconv über Homebrew und nicht über MacPorts installiert haben. Beides sind Paketmanager. Wenn Sie nicht sicher sind, ob Brew installiert ist, geben Sie einfach Brew im Terminal ein, wenn Sie diese Antwort erhalten:

Example usage:
  brew [info | home | options ] [FORMULA...]
  brew install FORMULA...
  brew uninstall FORMULA...
  brew search [foo]
  brew list [FORMULA...]
  brew update
  brew upgrade [FORMULA...]
  brew pin/unpin [FORMULA...]

Troubleshooting:
  brew doctor
  brew install -vd FORMULA
  brew [--env | config]

Brewing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook

Further help:
  man brew
  brew home

Sie wissen, dass Homebrew installiert ist.

brew list

zeigt alle Pakete, die Sie installiert haben, einschließlich libiconv

@ericbrooke Ich meine, ich habe keinen Sinn darin gesehen, brew uninstall libiconv gleich nach brew tap homebrew/dupes zu machen, wenn libiconv nur nach dem Tippen auf Dupes gefunden würde, weil es nicht im Standard-Repo ist. Ist es nur für den Fall da, wenn Ihre Homebrew-Installation irgendwie kaputt ist?

Wie Sie auch von der Anwesenheit von libiconv in "Dupes" wissen, ist iconv Teil von OS X + Xcode, den Sie nicht über brew hinzufügen müssen.

Ich verwende Homebrew nicht, aber Homebrew sollte nichts unter /usr/{include,lib} berühren, richtig? Oder ist die Neuinstallation von libiconv über brew ein Versuch, die beschädigten Dateien wiederherzustellen?

Auf einem neuen MacBook Pro mit Vanilla Mountain Lion+Xcode+Command Line Tools installiert sehe ich /usr/include/iconv.h und /usr/lib/libconv.so dort, also habe ich mich gefragt, was die Ursache für das Fehlen dieser ist Dateien könnten sein.

@lamont-granquist danke.

Ich habe getan, was Sie aufgelistet haben. Ich bin auf ein Berechtigungsproblem gestoßen auf:
Sie haben keine Schreibberechtigung für das Verzeichnis /Library/Ruby/Gems/2.0.0.

Anscheinend muss ich mein rvm reparieren und nach dem folgenden Schritt wurde es installiert und fahre mit meinem Bundle-Installationsprozess fort.
rvm installieren 2.1.2
rvm-Nutzung 2.1.2
gem update --system

@knu ja, jedes Mal, wenn ich das Betriebssystem aktualisiere oder von Time Machine wiederherstelle, scheint es, als würde Homebrew in den Müll geworfen und ich muss alles neu installieren. diese Anweisungen sind so pessimistisch wie möglich. Wenn jemand eine vernünftige, saubere Xcode-Installation hat und libiconv korrekt in Homebrew installiert ist, sollte der letzte Gem-Installationsbefehl alles sein, was benötigt wird.

Es stellt sich also heraus, dass /usr/local/include/iconv.h iconv_open in libiconv_open definiert und aus irgendeinem Grund clang die Homebrew-Header-Datei in /usr/local/include über /usr/include abholt und dann versucht, zu verknüpfen gegen /usr/lib/libiconv.dylib. Der Trick besteht darin, die Header-Datei iconv.h zu entfernen, die durch die erzwungene Verknüpfung von libiconv erstellt wurde.

TL; DR: vorherige Anweisungen zur "Behebung" dieses Problems (einschließlich meines) machen alles noch schlimmer.

Also, die aktuellen Anweisungen zur Reparatur Ihrer Mac-Installation:

Stellen Sie sicher, dass Xcode und die Befehlszeilenprogramme korrekt installiert sind. Dies behebt Probleme, bei denen ich keine Header-Datei /usr/include/iconv.h hatte. Wählen Sie im Dialogfeld „Xcode abrufen“ aus:

sudo xcode-select --install

Möglicherweise möchten Sie Homebrew und libiconv aktualisieren, falls es veraltet ist (und falls Ihr libiconv in Homebrew vor langer, langer Zeit installiert wurde). Dies ist wahrscheinlich völlig optional, da wir jetzt überhaupt nicht mit Homebrew libiconv verknüpfen werden:

brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv

Verknüpfen Sie libiconv nicht, damit es das System libiconv nicht überschreibt (wenn dies Ihnen "kein solches Fass" gibt, ist das in Ordnung, jeder andere Fehler und Sie möchten wahrscheinlich zurückgehen und Homebrew und libiconv aktualisieren):

brew unlink libiconv

Nokogiri bauen:

gem install nokogiri

@lamont-granquist Vielen Dank!!

@lamont-granquist Keine Ahnung warum, aber in deinem letzten Kommentar hat gem install nokogiri bei mir nicht funktioniert.
Stattdessen, nachdem Sie alle Schritte wie folgt ausgeführt haben:

brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew install libiconv
brew unlink libiconv

gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv hat bei mir funktioniert.

Ich bin auf 10.9 mit rvm, falls das hilft.

@lamont-granquist Danke für die tolle Untersuchung! Ich denke, ich werde versuchen, das Problem zu reproduzieren und eine "Lösung" dafür auszuarbeiten.

@SeanWangDev irgendwo hast du eine andere iconv.h, die zuerst abgeholt und verwendet wird. Es könnte der MacPorts statt des Homebrew sein.

Ja, ich glaube schon. Es gibt einen bei

/usr/local/Cellar/libiconv/1.14/include/iconv.h

noch eins bei

/usr/include/iconv.h

Letzteres ist eine frühere Version.
Danke @lamont-granquist

/usr/include/iconv.h ist in Ordnung, das ist Teil von Xcode, ersteres ist Homebrew, das im 'Cellar' versteckt ist, was auch in Ordnung ist. Wenn in /opt/local/include oder was auch immer nichts steht, würde ich vermuten, dass /usr/lib/libiconv.dylib irgendwie beschädigt ist?

@lamont-granquist Das geht mir jetzt etwas über den Kopf. Wie können wir wissen, dass libiconv.dylib beschädigt ist?
Wenn ich ls -al /usr/lib/libiconv* mache, ist das Ergebnis folgendes

xxxx  1 xxx  xxx       16 10  5  2013 /usr/lib/libiconv.2.4.0.dylib -> libiconv.2.dylib
xxxx  1 xxx  xxx  2088992 10  5  2013 /usr/lib/libiconv.2.dylib
xxxx  1 xxx  xxx       20 10  5  2013 /usr/lib/libiconv.dylib -> libiconv.2.4.0.dylib

Ja, das sieht gut aus, das ist meins:

% ls -al /usr/lib/libiconv*
lrwxr-xr-x  1 root  wheel       16 Feb 26  2014 /usr/lib/libiconv.2.4.0.dylib@ -> libiconv.2.dylib
-r-xr-xr-x  1 root  wheel  2088992 Feb 26  2014 /usr/lib/libiconv.2.dylib*
lrwxr-xr-x  1 root  wheel       20 Feb 26  2014 /usr/lib/libiconv.dylib@ -> libiconv.2.4.0.dylib

Was ist mit /opt/local/lib/libiconv.dylib oder /opt/local/include/iconv.h ? Beides könnte Probleme verursachen.

@lamont-granquist
Nein, ich habe kein /opt/-Verzeichnis. Sind das was wir suchen?

-r--r--r--+ 1 User  admin  1052128  9  4 11:30 /usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib
-rw-r--r--+ 1 User  admin  1658  9  4 11:22 /usr/local/Library/Taps/homebrew/homebrew-dupes/libiconv.rb
-r-xr-xr-x  1 root  wheel  2088992 10  5  2013 /usr/lib/libiconv.2.dylib

iconv.h-Dateien sind nur diese beiden:

/usr/local/Cellar/libiconv/1.14/include/iconv.h
/usr/include/iconv.h

Nein, das ist alles cool. Soweit ich sehen kann, sollten Sie ohne weitere Argumente "Gem Install Nokogiri" ausführen können ....

Ich wollte nur hinzufügen, dass gem install nokogiri -v 1.6.3.1 -- --with-iconv-dir=/usr/local für mich gut funktioniert hat. Bei der Verwendung von Bundler musste ich bundle config build.nokogiril --with-iconv-dir=/usr/local tun

@lamont-granquist Ja, gem install nokogiri funktioniert jetzt einwandfrei. Aber dieser Zustand ist anders. Diesmal wurde Nokogiri bereits zuvor durch 'gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv' installiert. Zuvor funktionierte 'gem install nokogiri' nicht, wenn ich nokogiri nicht installiert hatte.
Ist es möglich, dass beim Ausführen von 'gem install nokogiri -- --with-iconv-dir=/usr/local/opt/libiconv' etwas an Dateien geändert oder einige Dateien wie libiconv.dylib oder iconv.h hinzugefügt wurden?

@SeanWangDev :+1:

OS X 10.9.4 Mavericks.
Jungs bitte helft mir. Ich habe jeden einzelnen Weg ausprobiert, der oben ist. Keiner von ihnen arbeitet für mich. Ich habe auf gem install nokogiri mit/ohne Argumente gestapelt, ich bekomme immer noch einen Fehler:

$ gem nokogiri installieren
Erstellen nativer Erweiterungen. Das kann dauern...
Erstellen von Nokogiri mit gepackten Bibliotheken.
FEHLER: Fehler beim Installieren von nokogiri:
FEHLER: Native Gem-Erweiterung konnte nicht erstellt werden.

/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby extconf.rb

Erstellen von Nokogiri mit gepackten Bibliotheken.
Suche nach iconv.h ... * extconf.rb fehlgeschlagen *
Makefile konnte aus irgendeinem Grund nicht erstellt werden, wahrscheinlich nicht erforderlich
Bibliotheken und/oder Header. Weitere Einzelheiten finden Sie in der Datei mkmf.log. Du darfst
Konfigurationsoptionen benötigen.

Bereitgestellte Konfigurationsoptionen:
--with-opt-dir
--ohne-opt-dir
--with-opt-include
--ohne-opt-include=${opt-dir}/include
--with-opt-lib
--ohne-opt-lib=${opt-dir}/lib
--with-make-prog
--ohne-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/rvm/rubies/ruby-2.0.0-p353/bin/ruby
--Hilfe
--reinigen
--use-system-libraries
--enable-static
--disable-static
--with-zlib-dir
--ohne-zlib-dir
--with-zlib-include
--ohne-zlib-include=${zlib-dir}/include
--with-zlib-lib
--ohne-zlib-lib=${zlib-dir}/lib
--enable-cross-build
--disable-cross-build
/usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:434:in try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:565:in try_cpp'
aus /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:1044:in block in have_header' from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:895:in Block in check_for'
von /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:340:in block (2 levels) in postpone' from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:310:in öffnen'
von /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:340:in block in postpone' from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:310:in öffnen'
aus /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:336:in postpone' from /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:894:in check_for'
aus /usr/local/rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/mkmf.rb:1043:in have_header' from extconf.rb:103:in have_iconv?'
aus extconf.rb:148:in block (2 levels) in iconv_prefix' from extconf.rb:90:in preserving_globals'
aus extconf.rb:143:in block in iconv_prefix' from extconf.rb:120:in each_iconv_idir'
aus extconf.rb:137:in iconv_prefix' from extconf.rb:428:in blocken

'
from extconf.rb:161:in block in process_recipe' from extconf.rb:154:in tap'
aus extconf.rb:154:in process_recipe' from extconf.rb:423:in
'

Gem-Dateien bleiben zur Überprüfung in /usr/local/rvm/gems/ruby-2.0.0-p353/gems/nokogiri-1.6.3.1 installiert.
Ergebnisse werden in /usr/local/rvm/gems/ruby-2.0.0-p353/gems/nokogiri-1.6.3.1/ext/nokogiri/gem_make.out protokolliert

Überprüfen Sie, ob Sie diese Dateien haben:

% ls -la /usr/include/iconv.h
-rw-r--r--  1 root  wheel  7981 Jul 29 15:32 /usr/include/iconv.h
% ls -la /usr/lib/libiconv.*
lrwxr-xr-x  1 root  wheel       16 Feb 26  2014 /usr/lib/libiconv.2.4.0.dylib@ -> libiconv.2.dylib
-r-xr-xr-x  1 root  wheel  2088992 Feb 26  2014 /usr/lib/libiconv.2.dylib*
lrwxr-xr-x  1 root  wheel       20 Feb 26  2014 /usr/lib/libiconv.dylib@ -> libiconv.2.4.0.dylib

Wenn Sie dies nicht tun, verwenden Sie sudo xcode-select --install und/oder gehen Sie zur Download-Site für Apple-Entwickler und deinstallieren Sie xcode und die xcode-Befehlszeilenprogramme manuell und installieren Sie sie erneut, bis Sie diese Dateien installiert haben.

Wenn Sie dann Homebrew verwenden, aktualisieren Sie Ihr Homebrew und unlink die libiconv

brew update
brew tap homebrew/dupes
brew uninstall libiconv
brew unlink libiconv
brew install libiconv

überprüfen Sie, dass Sie /usr/local/include/iconv.h nicht haben:

% ls -la /usr/local/include/iconv.h
ls: /usr/local/include/iconv.h: No such file or directory

Stellen Sie außerdem sicher, dass Sie /opt/local/include/iconv.h nicht haben

% ls -la  /opt/local/include/iconv.h
ls: /opt/local/include/iconv.h: No such file or directory

Wenn Sie diese Datei haben, haben Sie iconv von macports installiert, idealerweise würden Sie diese loswerden.

dann versuche es:

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

(hör auf, wenn du den findest, der funktioniert)

wenn alle Stricke reißen:

brew link --force libiconv
gem install nokogiri -- --with-iconv-dir=/usr/local

etwas drin sollte funktionieren.

@ lamont-granquist: +1:

@lamont-granquist Danke für deine Anweisung, ich verstehe, was los ist, und habe begonnen, an einer Lösung zu arbeiten. Ich kann das Problem jedoch immer noch auf keinem meiner Macs reproduzieren, daher gibt es keine Möglichkeit zu bestätigen, ob ein Fix funktioniert. Können Sie möglicherweise die Schritte für die Reproduktion angeben?

Nun, ich habe dieses MBP seit 3 ​​Jahren und nach 2 Betriebssystem-Upgrades und mindestens 3 TM-Wiederherstellungen war meine /usr/include/iconv.h irgendwie verschwunden. Das Nukeing dieser Datei kann also das Problem verursachen. Die Lösung besteht darin, xcode und die Befehlszeilentools ordnungsgemäß neu zu installieren.

Außerdem schlagen die Leute beim Debuggen vor, 'brew link libiconv --force' zu tun, damit es in /usr/local/include/iconv.h installiert wird - obwohl es große Warnungen gibt, wenn Sie 'brew install libiconv' machen ' und 'brew link libiconv', dass dies eine schlechte Idee ist. Das Problem dabei ist, dass Sie diese iconv.h abholen können, während Sie das System /usr/lib/libiconv.dylib abholen und das sofort einen Konflikt zwischen iconv_open() und libiconv_open() hat und nicht kompiliert werden kann, weil sie unterschiedlich sind Versionen.

Ich bin mir nicht sicher, ob es in diesen Fällen etwas zu beheben gibt. Das Problem liegt wirklich darin, dass Sie Ihr Betriebssystem verstümmeln und es wieder in eine ursprünglichere Form bringen müssen.

Es gibt eine Sache, die ich nicht verstehe, weshalb das Build-System von nokogiri MacPorts-installierte /opt/local/include/iconv.h-Dateien findet. Ich verwende MacPorts nicht, also habe ich das nicht debuggt, aber es verursacht ähnliche Probleme wie wenn homebrew iconv.h direkt in /usr/local/include verlinkt hat. Wenn nokogiri dazu gebracht werden könnte, damit aufzuhören, würde es Leuten helfen, die libiconv von MacPorts installiert haben.

$ ls -la /usr/include/iconv.h

-rw-r--r-- 1 Wurzelrad 7981 11. September 11:32 /usr/include/iconv.h

ls -la /usr/lib/libiconv.*
lrwxr-xr-x 1 Wurzelrad 16 Sep 11 01:03 /usr/lib/libiconv.2.4.0.dylib -> libiconv.2.dylib
-r-xr-xr-x 1 Wurzelrad 2088992 Sep 11 01:02 /usr/lib/libiconv.2.dylib
lrwxr-xr-x 1 Wurzelrad 20 Sep 11 01:03 /usr/lib/libiconv.dylib -> libiconv.2.4.0.dylib

Brauerei-Update
Homebrew von 45e07c0e auf e0dee399 aktualisiert.
==> Aktualisierte Formeln
android-ndk gehen lockrun pazpar2
apache-spark h2 mpd pktanon
gearman juju-schnellstart ossp-uuid

$ Brew Tap Homebrew / Dupes
Achtung: Bereits angezapft!

$ brew deinstallieren libiconv

/usr/local/Cellar/libiconv/1.13.1... deinstallieren

Fehler: Zugriff verweigert - /usr/local/Cellar/libiconv/1.13.1/bin/iconv

es gibt mir einen Berechtigungsfehler bei diesem Schritt

Sie müssen alle Ihre Berechtigungen unter /usr/local korrigieren

Was auch immer Ihr Login ist, Sie müssen die Perms reparieren, damit Root keine Homebrew-Dateien unter /usr/local besitzt:

Mein Benutzername ist 'lamont', den ich mit dem Befehl id finden kann:

% id -nu
lamont

Um Dauerwellen zu reparieren, würde ich tun:

% sudo chown -R lamont /usr/local

Sie sollten mit diesem Befehl jedoch sehr vorsichtig sein und überprüfen, ob Sie alles richtig geschrieben und den richtigen Benutzernamen erhalten haben.

@lamont-granquist Installiert das libiconv-Paket von Homebrew nicht /usr/local/lib/libiconv.dylib, während /usr/local/include/iconv.h abgelegt wird? Was ich nicht verstehe ist, wenn /usr/local/include/iconv.h abgeholt wird, warum /usr/local/lib/libiconv.dylib beim Linken nicht ist. Normalerweise, wenn -I/usr/local/include in CPPFLAGS ist, sollte -L/usr/local/lib in LDFLAGS sein.

Was den Umweltschaden betrifft, könnte Nokogiri zumindest vorschlagen, die Befehlszeilentools (neu) zu installieren, wenn /usr/include/iconv.h unter OS X fehlt.

brauen unlink libiconv
Fehler: Kein solches Fass: /usr/local/Cellar/libiconv

Ich habe die Nachricht ignoriert und die nächsten Schritte befolgt. Kein Erfolg

@knu ja, ich habe mir das angesehen und ich glaube, ich habe mich im verwinkelten Labyrinth von mkmf.rb verlaufen.

@Ilovebarca rm -f /usr/local/include/iconv.h könnte helfen

@lamont-granquist
nö hat nicht geholfen. BTW vielen Dank für den Versuch, mir zu helfen.
Das ist verrückt, ich bin neu auf dem Mac und fange an, es zu hassen :))

Ich werde einige Änderungen am Iconv-Erkennungsprozess vornehmen und eine Überprüfung auf fehlende /usr/include/iconv.h unter OS X zu extconf.rb hinzufügen. Hier ist noch Arbeit , und Tester sind willkommen!

Ich habe Github-Probleme, Stack-Austausch, Google usw. durchgearbeitet, und das einzige, was bisher funktioniert hat, war der Vorschlag von @lamont-granquist . Einrichtung mit:

OS X 10.9.5
rbenv

Ich verstehe, dass so viele Leute ihre OS X-Umgebung irgendwie kaputt machen und das nicht einmal bemerken. Ein Problem sind fehlende Xcode Command Line Tools und das andere ist Homebrew. Die nächste Version von nokogiri wird versuchen, einen solchen Bruch zu erkennen, bevor der Build gestartet wird, und den Benutzer davor warnen.

Danke für deine Unterstützung!

Danke @lamont-granquist, ich kämpfe jetzt seit einer Woche mit diesem Problem und endlich funktioniert deine Lösung der Neuinstallation von libiconv ... das ist eine Erleichterung!!!

@jomz funktioniert unter OSX 10.10. danke :+1:

Aus einer Neuinstallation von 10.10 gerade heute:

xcode-select --install
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew doctor
brew install ruby
source /etc/profile
gem install nokogiri

Dadurch wurden Ruby-Version 2.1.5p273 und Nokogiri 1.6.4.1 installiert. Vermutlich könnten Sie die Installation dieser Versionen über Homebrew und Rubygems erzwingen.

Von einer 10.10-Installation, die von 10.9 mit bereits installiertem Homebrew und Ruby aktualisiert wurde:

brew install libxml2 libxslt
gem install nokogiri -- --use-system-libraries

Ich bin mir nicht sicher, ob es notwendig war, libxml2 und/oder libxslt neu/zu installieren, aber das hat den Trick für mich getan.

Ich glaube, wir haben dies im aktualisierten Installations-Tutorial hier festgehalten:

http://www.nokogiri.org/tutorials/installing_nokogiri.html

Wenn nicht, lassen Sie es mich bitte wissen und ich werde wieder öffnen.

Danke für den Tutorial-Link! Bei mir hat es funktioniert, als ich die Dateipfade angegeben habe, wie in „Verwenden von nicht standardmäßigen libxml2/libxslt-Installationen“ beschrieben. (Scheint, /usr/bin in OS X 10.6.8 wird als nicht standardmäßiger Speicherort für Systembibliotheken angesehen.)

Um die Dateipfade zu finden, habe ich die Terminal-Befehle which xml2-config und which xslt-config verwendet. Vielleicht aktualisieren Sie das Tutorial, um dies vorzuschlagen?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

deepj picture deepj  ·  41Kommentare

francesco-loreti picture francesco-loreti  ·  22Kommentare

flavorjones picture flavorjones  ·  24Kommentare

mbixby17451 picture mbixby17451  ·  30Kommentare

sarahtjones picture sarahtjones  ·  17Kommentare