Dlaczego instalacja Nokogiri w systemie Mac OS kończy się niepowodzeniem, gdy brakuje biblioteki libiconv?


159

Próbowałem zainstalować Nokogiri w systemie Mac OS 10.9.3 i cokolwiek próbuję, instalacja kończy się niepowodzeniem i pojawia się następujący komunikat o błędzie:

$ 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

Po wykonaniu wielu wskazówek pomocnych w sieci, w tym zbudowaniu i zainstalowaniu libxml2 i libxslt przy użyciu brew i zbudowaniu libiconv ze źródeł (jak opisano w „ Instalowaniu Nokogiri ”), błąd pozostaje ten sam.

Podczas próby uruchomienia instalacji Nokogiri wydaje się, że libxml2 i libxslt działają poprawnie, ale nie libiconv.

Każdy, kto lepiej zna te rzeczy, wie, jak zainstalować Nokogiri?


Nie pokazujesz dokładnie poleceń, których próbujesz użyć, więc będziemy kręcić w ciemności, próbując odpowiedzieć. Zawsze używam gem install nokogiri, ale potem używam RVM do zarządzania moimi instalacjami Ruby w Mac OS. libxml i libxslt nie są powiązane z iconv, więc polecam zadać pytanie na Nokogiri-talk, które jest ich forum wsparcia. Nie pamiętam, żebym miał jakiekolwiek problemy z iconv podczas instalacji Nokogiri i mam to na kilku maszynach.
Tin Man

1
W międzyczasie otworzyłem zgłoszenie na github: github.com/tenderlove/nokogiri/issues/442, które zawiera trochę więcej informacji.
polarblau

2
Oto link do rozwiązania tego samego problemu na OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

sudo gem install nokogiri”. Nie używaj sudodo instalowania klejnotów ani modyfikowania domyślnego Rubiego. Zamiast tego użyj rbenv lub RVM do zarządzania oddzielnym Rubim. Jest to wielokrotnie omawiane w przepełnieniu stosu.
Tin Man

Czy próbowałeś odinstalować xz przed instalacją nokogiri?
lifeisfoo

Odpowiedzi:


237

Miałem ten sam problem. Niestety „ Instalacja Nokogiri ” nie obejmuje problemów z Iconv. Oto, jak rozwiązałem problem.

Najpierw zainstaluj homebrew , ułatwi ci to życie. Jeśli masz już zainstalowany, pamiętaj, aby pobrać najnowsze formuły, aktualizując w ten sposób:

brew update

Uwaga : W systemie OSX 10.9+ może być konieczne zainstalowanie narzędzi poleceń xCode, aby umożliwić zainstalowanie libiconv.

xcode-select --install

następnie zainstaluj nowszą wersję libiconv

brew install libiconv

następnie zainstaluj swój klejnot

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

5
Po wykonaniu "brew install libiconv" i "brew link libiconv" udało mi się pomyślnie zainstalować nokogiri. Mam nadzieję, że oznacza to, że nie mam twardej zależności od konkretnej wersji libiconv zainstalowanej przez brew.
Steven Chanin

87
Kiedy próbuję brew install libiconvto wypluć: Błąd: Brak dostępnej formuły dla libiconv Apple dystrybuuje libiconv z OS X, możesz go znaleźć w / usr / lib. Niektóre skrypty kompilacji nie wykrywają go poprawnie. Sprawdź istniejące formuły pod kątem rozwiązań.
Seth Bro

62
Jeśli używasz Mavericks, może być konieczne zainstalowanie narzędzia wiersza poleceń Xcode za: xcode-select --install. To rozwiązało problem.
Michael Stalker

34
Jeśli nadal nie możesz brew install libiconvuzyskać właściwej formuły, użyj tego:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) Nie musiałem tego robić brew; tylko xcode-select --installnaprawiłem ten problem dla mnie.
bjfletcher

84

Spróbuj użyć bibliotek systemowych. OSX jest dostarczany z libiconv w nowszych wersjach, ale domyślny skrypt instalacyjny wydaje się mieć problem

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

Edycja: Jeśli korzystasz z pakietu, jak wspomniał Geoff , możesz:

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

5
Jeśli używasz bundlera - możesz uruchomić „bundle config build.nokogiri --use-system-libraries”
Geoff Evason,

1
w końcu „bundle config build.nokogiri --use-system-libraries” zadziałało. Nienawidzę, kiedy to się dzieje
nils petersohn

1
Pracował dla mnie na Mac OS 10.10 Yosemite.
Lloyd Dewolf

dlaczego potrzebuję dodatkowego „-” w środku polecenia instalacji gem?
Rembrandt Q. Einstein

3
Nie udało mi się w dniu 10.10.3. Xcode 6.3 z libxml2 version 2.6.21 or later is required!.
Rivera

36

Rozwiązanie @ Cory zawiera poprawną odpowiedź, ale rozwiązanie na Mavericks jest w rzeczywistości znacznie prostsze niż najlepsze rozwiązanie, więc repostuję tylko z niezbędnymi krokami.

Na Mavericks (OSX 10.9+):

Zainstaluj narzędzia wiersza poleceń Xcode:

xcode-select --install

następnie zainstaluj swój klejnot:

gem install nokogiri

4
Działa na Yosemite. Tak się cieszę, że przewinęłam w dół i nie użyłam starszych odpowiedzi.
yuяi

ogromna oszczędność czasu, dzięki za tę wskazówkę! zadziałało dla mnie urokiem na indywidualistów
lody

Czy próbowałeś użyć mojego rozwiązania? Nie wymaga intsalacji xcode.
Filip Kis,

Jest to oficjalne rozwiązanie z dokumentacji Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) i jedyne, które działało na El Capitan. Przyjęte rozwiązanie tam nie zadziałało.
Johannes,

Pracował dla mnie przy El Capitan, to irytujące. Dzięki za link do Nokogiri docs @Johannes - naprawdę przydatne. Każdy powinien trzymać się z daleka od rozwiązań, które mówią „używaj bibliotek systemowych” - zła rada.
Polsonby,

19

W końcu udało mi się rozwiązać ten problem. Żadne z powyższych rozwiązań nie rozwiązało tego całkowicie za mnie.

Otrzymałem ten błąd podczas próby gem install nokogiriw systemie OSX Lion 10.7.2. Po pierwsze, ten błąd maskuje prawdziwy problem, mówiąc, że brakuje libiconv, ponieważ otrzymasz ten sam błąd, nawet jeśli nokogiri nie może znaleźć libxslt lub libxml2, co w moim przypadku nie może.

Postępowałem więc zgodnie z instrukcjami na http://nokogiri.org/tutorials/installing_nokogiri.html w sekcji Homebrew (nieznacznie zmodyfikowane, aby uwzględnić bardziej aktualną wersję 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

W tym momencie postępowałem zgodnie ze wskazówkami na stronie nokogiri i próbowałem

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

Jednak nadal się to nie powiodło, ponieważ podczas budowania libxslt ze źródła instaluje /includefolder w dziwacznym miejscu. Musisz więc osobno określić foldery libi, w ten includesposób:

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

To nadal nie działało (ten sam błąd libiconv), więc próbowałem określić wszystkie trzy wymagane biblioteki (libxslt, libxml2 i 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

Teraz mam inny błąd! Wciąż był to błąd, ale przynajmniej był inny. Proces tworzenia nie powiódł się z:

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

Co? Po wielu googlach natknąłem się na ten cudowny post: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -architektura/

Najwyraźniej OSX Lion jest dostarczany z niektórymi złymi wersjami biblioteki libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) i należy je zastąpić najnowszymi wersjami z zestawu Xcode SDK. Artykuł wyjaśnia to lepiej niż ja, więc przeczytaj powyższy link, aby uzyskać szczegółowe instrukcje.

Kiedy te zostały wymienione, pobiegłem

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

znowu i wszystko było dobrze. Mam nadzieję, że to pomoże komuś innemu.


Miałem ten sam problem, ale stwierdziłem, że usunięcie następujących plików z opt / local / lib: libz.dylib i libz.1.dylib i wykonanie pozostałych instrukcji załatwiło sprawę.
Undistraction

1
Myślę, że / opt / local oznacza instalację MacPorts. Jeśli korzystasz z homebrew i Macports, skończysz z odrobiną funky (jak widać w twoim przypadku). Najlepszym rozwiązaniem jest odinstalowanie Macports i użycie homebrew jako menedżera pakietów.
Cory

Dodałem poniżej nowe, prostsze rozwiązanie dla Mavericks (OSX 10.9+).
Micah Winkelspecht

17

Właśnie dodałem swój głos do tłumu, ale mkmf.log powiedział coś o niemożności znalezienia symboli dla architektury x86_64. Natknąłem się na to rozwiązanie:

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

Może nie rozwiązać niczego dla oryginalnego pytającego, ale może to komuś pomóc.

Uwaga boczna: nokogiri było moją największą przeszkodą w używaniu aplikacji ruby. Za każdym razem, gdy ktoś polega na innej wersji, muszę wymyślić, jak ją zbudować. I za każdym razem mój problem jest inny.


1
Zgadzam się z twoim sentymentem do nokogiri. Każdy. Pojedynczy. Czas.
jbnunn

Nie działało dla mnie w tej formie, ale ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesdziałało ...
bwoebi

U mnie też to zadziałało, dużo łatwiejsze rozwiązanie, nie korzystałem z ARCHFLAG, po prostu 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

to działało dla mnie na macos. Działa również z wersją1.6.6.4


Pracowałem bez --with-xml2-includeopcji dla mnie na gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
Catalinie

6

Używam .. OS X 10.9.4 Homebrew 0.9.4

Oto moje podsumowanie z tego wątku, aby pomyślnie zainstalować nokogiri, naprawiając brakujący libiconv.

Zainstaluj Homebrew http://brew.sh/ Lub zaktualizuj do najnowszej za pomocą poniższego polecenia

brew update

Zainstaluj libxml2 libxslt

brew install libxml2 libxslt

Połącz oba libxml2 libxslt

brew link libxml2 libxslt

Jeśli pojawi się ostrzeżenie o użyciu --force, po prostu użyj poniższego polecenia

brew link --force libxml2 libxslt

Zainstaluj narzędzia poleceń xCode, aby umożliwić zainstalowanie libiconv

xcode-select --install

Zainstaluj 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

Ostatni krok, zainstaluj 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

Rozwiązałem to na Yosemiteprowadzenie Ruby 2.1.4przez

  1. upewnij się, że masz zainstalowany xCode 6.1
  2. xcode-select --install, następnie
  3. W AppStore kliknij aktualizacje i zainstaluj najnowszą wersję narzędzi wiersza poleceń (co najwyraźniej xcode-select --installnie działa - westchnij)
  4. potem bundle installpracował normalnie.

Też zrobiłem, brew install libiconvale nie jestem przekonany, że krok był potrzebny.


Uważam, że nie brew install libiconvjest to konieczne - nigdy nie zawracałem sobie głowy znalezieniem odpowiedniego pakietu i to działało dobrze. To prawda, mogło to być na moim komputerze od czasu, gdy wcześniej instalowałem nokogiri z Ruby 2.1.1.
jmstone617

„W AppStore kliknij aktualizacje i zainstaluj najnowszą wersję narzędzi wiersza poleceń (która najwyraźniej xcode-select --install nie działa - westchnij)” - żadne aktualizacje nie są dostępne. Jak zaktualizować narzędzia wiersza polecenia z Xcode? Nie pojawiają się w sekcji „Pobrane” w panelu preferencji.
chadoh

To zadziałało dla mnie bez wchodzenia do sklepu z aplikacjami. Zaktualizowałem narzędzia wiersza poleceń i system operacyjny (do Yosemite), a następnie uruchomiłem xcode-select --installi mogłem zainstalować Nokogiri.
stal

Musiałem zrobić: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-libraries .. bundle install
Zack Burt


3

Patrząc w plik mkmf, okazuje się, że nokogiri (lub gem, nie wiem) próbuje znaleźć zależności w / op / local /. Dla mnie to nie jest właściwa ścieżka, aby ich szukać.

Zmuszenie nokogiri do znalezienia bibliotek we właściwym miejscu (używam homebrew) załatwiło sprawę:

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

Może jest coś do naprawienia w nokogiri ...

HTH,


3

libiconv zostało usunięte z Homebrew 0.9. Teraz zaleca się skompilowanie libiconv ze źródeł, a następnie odniesienie się do instalacji podczas instalacji nokogiri gem. Zobacz instrukcje instalacji Nokogiri w sekcji Homebrew 0.9 na stronie instalacji Nokogiri


Na dzień dzisiejszy jestem w stanie uruchomić $ piwny zainstalować libiconv i pobraniu i zainstalowaniu libiconv-1.14.tar.gz
Evolve

2

Zajrzyj do pliku mkmf.log w katalogu kompilacji gem (np. /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). To dużo więcej informacji. W moim przypadku, kiedy to trafiłem, było to, że Nokogiri specjalnie dodaje / opt / local / lib do ścieżki wyszukiwania biblioteki, a GNU Backgammon zainstalował tam niekompatybilny libiconv.


2

Zakładając, że zainstalowałeś libxml2 i libxslt z MacPorts, możesz nadal otrzymywać ten błąd z powodu niezgodności kolejności ścieżek dołączania i ścieżek łączy używanych przez wywołanie funkcji have_func ('iconv_open', 'iconv.h')

Proste rozwiązanie (łatka): usuń libiconv. * W / usr / local / lib


Mam zainstalowane biblioteki libxml2 i libxslt z MacPorts, ale nie ma plików libiconv. * W / 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/

tak samo jak powyżej, jest to rozwiązanie dla homebrew i korzystania z instalacji gem (zastosowanie zmian zależy od wersji)

Jednakże, jeśli używasz Gemfile i instalacji pakietu, powinieneś zastosować konfigurację pakietu przed instalacją, tutaj kod

$ 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

ponownie, zastosowanie zmian zależy od wersji

mam nadzieję, że to ci pomoże.

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


2

Miałem podobne problemy z Mountain Lion. Okazuje się, że wcześniej zainstalowałem libiconv za pośrednictwem pakietu rvm i nie jest to już konieczne w przypadku ruby ​​1.9.3 / Mountain Lion / nokogiri.

Postępując zgodnie z radą https://rvm.io/packages/ , usunąłem mój katalog $ rvm_path / usr i przebudowałem Ruby 1.9.3. Następnie instalacja nokogiri była prostą instalacją klejnotową. Bez bałaganu z brew / macports / ręczną instalacją źródeł!


2

Możesz to również zrobić na Mavericks:

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

Po prostu upewnij się, że masz zainstalowany xcode


to samo rozwiązanie działa również dla 10.7.5: gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Applications / Xcode.app / Contents / Developer / Platforms / MacOSX.platform / Developer /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho

2

Przez chwilę walczyłem z Nokogiri na OS X 10.10 Yosemite

Moje środowisko zostało z jakiegoś powodu pomieszane.

which bundlei which gemdawali mi /usr/bin/bundlei /usr/bin/gemzamiast~/.rbenv/shims/gem

Pomogło mi to poprawić sudo rm -i /usr/bin/gem /usr/bin/bundle

Następnie: 1. wróciłem do katalogu mojego projektu 2. odinstalowałem zależne 3. (ponownie) zainstalowałem zależne biblioteki: zrobiłem a brew install libxml2 libiconv libxslt 4. zainstalowałem nową wersję Ruby na świeżo (z rbenv) 5. zrobiłem gem install bundler 6. i bundle installuruchomiłem bez żadnych problemy.

Nokogiri po tym było dobrze.

Na przykład:

╰─% 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
Z perspektywy czasu (która zawsze wynosi 20/20) prawdopodobnie mogłem po prostu dostosować moją zmienną env PATH tak, aby najpierw dodawała rbenv.
Sam Figueroa

1

Musisz zaktualizować swój homebrew do wersji 0.9

następnie wykonaj poniższe czynności

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

Powinieneś dokładnie sprawdzić wersję biblioteki folderów.


Link i sudo zepsują wszystko. Są dostępne tylko w beczkach z kilku powodów. Używaj formuł naparu, ponieważ jest o wiele łatwiejszy w utrzymaniu. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

UŻYTKOWNICY HOMEBREW

Prawidłowe rozwiązanie, aby rozwiązać ten problem, jeśli używasz homebrew:

xcode-select --install

W oknie dialogowym wybierz opcję „Pobierz Xcode”.

brew unlink libiconv
gem install nokogiri

Krok xcode-select naprawia instalację Xcode i instalację narzędzi Xcode Command Line Utils. Zauważyłem, że nie mam /usr/include/iconv.h z powodu jakiegoś problemu z aktualizacjami O / S lub przywracaniem z kopii zapasowych. Jeśli nie masz tego pliku nagłówkowego i /usr/lib/libconv.dylib po uruchomieniu xcode-select, najprawdopodobniej będziesz musiał przeciągnąć Xcode z folderu aplikacji do kosza i ponownie zainstalować, a następnie ręcznie pobrać narzędzia wiersza polecenia dla Xcode z https://developer.apple.com/downloads/index.action i zainstaluj to.

Następnie musisz odłączyć libiconv od homebrew. Nie potrzebujesz tego. Clang faktycznie pobierze /usr/local/include/iconv.h przez /usr/include/iconv.h i #define iconv_open do libiconv_open, ale następnie połączy się z /usr/lib/libiconv.dylib, który nie ma libiconv_open, który jest tym, co powoduje, że mkmf nie znajduje pliku libiconv. To, co musisz zrobić, to usunąć linkowanie z iconv.h, aby nokogiri go nie znalazł.

Następnie po prostu zbuduj nokogiri normalnie.

Dla nowych użytkowników wszystko, co powinieneś zrobić, to zainstalować xcode z xcode-select i zainstalować nokogiri, ale jeśli znalazłeś to pytanie, prawdopodobnie masz nieudaną instalację, a nie świeżą instalację Mavericks.

Niektóre z pozostałych odpowiedzi są zdecydowanie niepoprawne. Większość z nich próbuje używać libiconv poza homebrew, co jest całkowicie niepotrzebne. Odpowiedzi na tobrew link libiconv które faktycznie powodują problem, polegają na tym, że clang jest zdezorientowany i próbuje odczytać plik nagłówkowy homebrew i połączyć się z bibliotekami systemowymi. Odpowiedzi, które sugerują, --use-system-librariessą słabe, ponieważ nokogiri musi być połączone z dołączonymi do niego bibliotekami libxml2 i libxslt, ponieważ inne wersje tych bibliotek są z nim niekompatybilne. Odpowiedzi, które chcą, abyś skompilował ze źródeł, są po prostu beznadziejnie zbyt skomplikowane.

TL; DR:

  • Zaktualizuj i / lub napraw instalację Xcode
  • Odłącz swoje homebrew libiconv, ponieważ próba użycia powoduje tylko problemy
  • Buduj nokogiri normalnie

UŻYTKOWNICY RVM

Stare instalacje RVM mogą mieć plik libiconv ukryty w katalogach rvm, który jest w konflikcie z bibliotekami systemowymi. Więcej informacji można znaleźć pod adresem https://stackoverflow.com/a/11809261/506908 .

UŻYTKOWNICY MacPorts

Jeśli masz /opt/local/lib/libiconv.dylib, wtedy nokogiri dodaje tę ścieżkę do listy katalogów, których szuka, i odnajdzie instalację MacPorts podobną do tego, jak wybiera homebrew libiconv i powoduje konflikt z bibliotekami systemowymi. Możesz spróbować:

sudo port uninstall libiconv

Jeśli to się nie powiedzie z powodu zależności, możesz spróbować bezpośrednio połączyć się z wersją MacPorts (nieprzetestowane):

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

Potwierdzanie gem install nokogiri -- --with-iconv-dir=/opt/localdziała dobrze po libiconvzainstalowaniu MacPorts
PartialOrder

1

Ten pracował dla mnie

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 / Cellar / libiconv / 1.14


to było połączenie --use-system-libraries i --with-iconv-dir, które zrobiły to za mnie
aaaarrgh

0

Wpadłem na to dziś rano ... po uaktualnieniu do Mavericks. Zrobiliśmy wiele rzeczy. Jeśli jednak ktoś ma ten problem, oto kilka rzeczy do wypróbowania.

Uruchomiłem `` xcode-select --install '', a następnie zainstalowałem narzędzia wiersza poleceń (zaskoczone, że nie zaktualizowało się to w aktualizacji systemu operacyjnego). Uruchomiłem 'rvm implode' (zbuduję go później).

Połączyliśmy ze sobą dwa pliki wyjściowe błędów:

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

Co zdawało się wskazywać, że kompilator c używa zaskakującego ustawienia.

Uciekłem 'env'

Wyjście zawierało:

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

Te pliki nie istniały w systemie plików ...

Po tych wszystkich zmianach przenoszę się na nowe okna terminala (więc wszystko było świeże). Instalacja vagrant-berkshelf (która z kolei instaluje nokogiri) działała dobrze.

UWAGA: podczas uruchamiania 'env' w nowym oknie nie było już ustawienia dla CC lub CXX ...

Nie jestem pewien co do kluczowej części tego lub czy porządek ma znaczenie, ale próbowałem odtworzyć części, które wydawały się odgrywać rolę w doprowadzeniu do tego.


Czy jesteś pewien, że polecenie się gem install nokogiripowiodło? Czy z komunikatem „już zainstalowano” lub pomyślną instalacją?
Spundun

Tak. Ponownie zainstalowałem rvm i oh-my-zsh podczas tworzenia kopii zapasowych na moim Macu. To, czego nie byłem w stanie dowiedzieć się, to jak zainstalować nokogiri na rvm gemset. Kiedy przełączam się z powrotem na „rvm use system”, mogę zainstalować nokogiri 1.6.3.1 nad wersją 1.5.6, która jest dostępna w systemie OS X Ruby 2.0.0p451.
aaron blythe

W końcu dla mnie był to stackoverflow.com/questions/19643153/ ... brew odinstaluj apple-gcc42 brew zainstaluj apple-gcc42
aaron

0

Zgodnie z dokumentacją, od wersji OSX 10.9 i Homebrew 9.5+ prawdopodobnie brakuje narzędzi programistycznych.

Instalacja Nokogiri

Rozwiązywanie problemów

Jeśli masz problemy ze wzmianką o braku libiconv, który wygląda mniej więcej tak:

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

Prawdopodobnie brakuje Ci odpowiednich narzędzi programistycznych. To naprawdę łatwe rozwiązanie:

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

Jest to zweryfikowane podczas pracy na kompilatorze clang w OSX 10.9 w / xcode.


0

Ten problem wystąpił po uaktualnieniu systemu Mac OS do Yosemite. Udało mi się rozwiązać ten problem, wykonując:

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

0

Miałem podobny problem i zaakceptowana odpowiedź kiedyś działała dla mnie. Teraz jednak widzę nowy komunikat o błędzie, w którym gmkdirbrakuje polecenia, jak w tym pytaniu:

gem install nokogiri -v '1.5.11' nie powiodło się z powodu: / usr / local / bin / gmkdir: nie ma takiego pliku lub katalogu

To, co zadziałało, to najpierw małe porządki:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

A potem brew unlink libiconvi cokolwiek innego, co musisz odłączyć (sprawdź z brew doctor). Następnie magiczne dwie linie (skopiowane z połączonej odpowiedzi):

brew install coreutils
gem install nokogiri

0

Proste kroki, które należy wykonać przed rozpoczęciem odinstalowywania i instalowania czegokolwiek. Sprawdź, czy masz CLT (zainstalowane narzędzia wiersza poleceń):

brew config

zobacz wersję CLT tutaj, jeśli jest zainstalowana, nie ma potrzeby ponownej instalacji.

Oznacza to, że problem polega na tym, że masz pozwolenie, aby ponownie zainstalować tylko klejnot pakietu, aby nie był sudo. Odinstaluj pakiet z gem uninstall bundler Install gem bundler gem install bundler

Najważniejszą kwestią jest tutaj zezwolenie, na podstawie którego instalowany jest klejnot pakietu, nigdy nie należy go sudo.


-1

Przede wszystkim upewnij się, że postępujesz zgodnie z instrukcją instalacji na nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Po skorzystaniu z przewodnika nadal miałem ten problem. Oto jak to rozwiązałem:

Przede wszystkim zainstalowałem iconv używając homebrew: brew install iconv

Potem odinstalowałem Rubiego, na szczęście jest to bardzo łatwe z rvm:

rvm uninstall 1.9.2        

Następnie musiałem ponownie zainstalować Ruby z następującymi opcjami:

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

Następnie tworzę gemset w nowej wersji ruby:

rvm use 1.9.2@coolproject

W końcu mogę zainstalować nokogiri w ten sposób:

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

W moim przypadku (podobnie jak w przypadku scotchi) kompilacja nie powiodła się z powodu niezgodnej biblioteki iconv w / opt / local / lib. Domyślnie proces budowania Nokogiri sprawdza najpierw / opt / local. Aby zmusić go do używania innego katalogu instalacyjnego, na przykład / usr / local, wykonaj:

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

Ten post na blogu proponuje ręczną instalację libiconv.

Następnie można zainstalować nokogiri z kilkoma przełącznikami informującymi go, gdzie znaleźć libiconv (zobacz wpis na blogu).

Na marginesie: po zainstalowaniu nokogiri udało mi się zainstalować gollum (którego instalacja również się nie powiodła, ponieważ nie mógł znaleźć iconv). Teraz jednak wciąż mam problemy, ponieważ kiedy uruchamiam gollum, Python ulega awarii.


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

UWAGA BRAKUJĄCY plik /lib/iconv/iconv.so w 2.0.0-p247, który jest obecny w instalacji 2.0.0-p0 gems.

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

Skopiuj plik

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

TERAZ DZIAŁA!

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

Uwaga: pracuję z rbenv, ale ten problem jest specyficzny dla instalacji klejnotów i powinien zostać naprawiony podczas transmisji!
Darren Weber,

ta odpowiedź nie ma nic wspólnego z biblioteką C libiconv, od której zależy kompilacja nokogiri. odpowiedź powinna zostać usunięta.
lamont

-1

Musiałem najpierw zainstalować gcc przed uruchomieniem ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.