Pourquoi l'installation de Nokogiri sur Mac OS échoue avec libiconv manquant?


159

J'ai essayé d'installer Nokogiri sur Mac OS 10.9.3 et quoi que j'essaye, l'installation échoue à la fin avec le message d'erreur suivant:

$ 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

Après avoir suivi de nombreuses aides trouvées sur le Web, notamment la construction et l'installation de libxml2 et libxslt à l'aide de brew et la construction de libiconv à partir des sources (comme décrit dans " Installer Nokogiri "), l'erreur reste la même.

Lorsque vous essayez d'exécuter l'installation pour Nokogiri, libxml2 et libxslt semblent bien se trouver, mais pas libiconv.

Quelqu'un avec une meilleure connaissance de ces choses sait comment installer Nokogiri?


Vous n'affichez pas les commandes exactes que vous essayez d'utiliser, nous allons donc filmer dans le noir pour essayer de répondre. J'utilise toujours gem install nokogiri, mais j'utilise ensuite RVM pour gérer mes installations Mac OS Ruby. libxml et libxslt ne sont pas liés à iconv, je vous recommande donc de poser votre question sur Nokogiri-talk qui est leur forum de support. Je ne me souviens pas d'avoir eu des problèmes iconv lors de l'installation de Nokogiri, et je l'ai sur un tas de machines.
the Tin Man

1
J'ai entre-temps ouvert un ticket sur github: github.com/tenderlove/nokogiri/issues/442 qui contient un peu plus d'informations.
polarblau

2
Voici un lien pour résoudre le même problème sur OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs

" sudo gem install nokogiri". Ne pas utiliser sudopour installer des gemmes ou modifier le Ruby par défaut. Utilisez plutôt rbenv ou RVM pour gérer un Ruby distinct. Ceci est couvert plusieurs fois sur Stack Overflow.
the Tin Man

Avez-vous essayé de désinstaller xz avant l'installation de nokogiri?
lifeisfoo

Réponses:


237

J'ai eu le même problème. Malheureusement, " Installer Nokogiri " ne couvre pas les problèmes Iconv. Voici comment j'ai résolu le problème.

Installez d'abord homebrew , cela vous facilitera la vie. Si vous l'avez déjà installé, assurez-vous de récupérer les dernières formules en mettant à jour comme suit:

brew update

Remarque : Sous OSX 10.9+, vous devrez peut-être installer les outils de commande xCode pour vous permettre d'installer libiconv.

xcode-select --install

puis installez une version plus récente de libiconv

brew install libiconv

puis installez votre bijou

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

5
Une fois que j'ai fait le "brew install libiconv" et "brew link libiconv", j'ai pu installer nokogiri avec succès. J'espère que cela signifie que je n'ai pas de dépendance stricte à la version spécifique de libiconv installée par brew.
Steven Chanin le

87
Quand j'essaie debrew install libiconv cracher: Erreur: Aucune formule disponible pour libiconv Apple distribue libiconv avec OS X, vous pouvez le trouver dans / usr / lib. Certains scripts de construction ne parviennent pas à le détecter correctement, veuillez vérifier les formules existantes pour trouver des solutions.
Seth Bro

62
Si vous utilisez Mavericks, vous devrez peut - être installer les outils de ligne de commande de Xcode: xcode-select --install. Cela a résolu le problème pour moi.
Michael Stalker

34
Si vous ne parvenez toujours pas brew install libiconvà obtenir la bonne formule, utilisez ceci:brew tap homebrew/dupes
jamesdlivesinatree

15
OS X Yosemite(10.10) Je n'ai pas eu à faire les brewchoses; juste le xcode-select --installrésolu ce problème pour moi.
bjfletcher

84

Essayez d'utiliser les bibliothèques système. OSX est livré avec libiconv dans les versions plus récentes, mais le script d'installation par défaut semble avoir un problème

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

Edit: Si vous utilisez bundler, comme mentionné par Geoff, vous pouvez faire:

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

5
Si vous utilisez bundler - vous pouvez exécuter "bundle config build.nokogiri --use-system-bibliothèques"
Geoff Evason

1
enfin le "bundle config build.nokogiri --use-system-libraries" a fonctionné. Je déteste quand cela arrive
nils petersohn

1
A travaillé pour moi sur Mac OS 10.10 Yosemite.
Lloyd Dewolf

pourquoi ai-je besoin du supplément "-" au milieu de la commande gem install?
Rembrandt

3
Échec pour moi le 10.10.3. Xcode 6.3 avec libxml2 version 2.6.21 or later is required!.
Rivera

36

La solution de @ Cory contient la bonne réponse, mais la solution sur Mavericks est en fait beaucoup plus simple que la solution supérieure, donc je republie uniquement les étapes nécessaires.

Sur Mavericks (OSX 10.9+):

Installez les outils de ligne de commande Xcode:

xcode-select --install

puis installez votre gemme:

gem install nokogiri

4
Fonctionne sur Yosemite. Tellement content d'avoir fait défiler vers le bas et de ne pas utiliser de réponses plus anciennes.
yuяi

énorme gain de temps, merci pour cette astuce! a travaillé un charme pour moi sur des mavericks
glace

Avez-vous essayé d'utiliser ma solution? Il ne nécessite pas d'intsalation xcode.
Filip Kis le

C'est la solution officielle de la documentation Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ), et la seule qui a fonctionné sur El Capitan. La solution acceptée n'a pas fonctionné là-bas.
Johannes

A travaillé pour moi sur El Capitan, tellement exaspérant. Merci pour le lien vers les documents Nokogiri @Johannes - vraiment utile. Tout le monde devrait rester à l'écart des solutions qui disent «utiliser les bibliothèques système» - mauvais conseil.
Polsonby le

19

J'ai enfin pu résoudre ce problème. Aucune des solutions ci-dessus ne l'a complètement résolu pour moi.

J'obtenais cette erreur en essayant gem install nokogirisur OSX Lion 10.7.2. Tout d'abord, cette erreur masque le vrai problème en disant que libiconv est manquant, car vous obtiendrez la même erreur même si nokogiri ne peut pas trouver libxslt ou libxml2, ce qui dans mon cas, il ne le pouvait pas.

J'ai donc suivi les instructions sur http://nokogiri.org/tutorials/installing_nokogiri.html sous la section Homebrew (légèrement modifiée pour tenir compte d'une version plus actuelle de libxml2):

brew install libxml2
brew link libxml2

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

À ce stade, j'ai suivi les instructions sur le site nokogiri et essayé

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

Cependant, cela a toujours échoué car lors de la construction de libxslt à partir des sources, il installe le /includedossier dans un endroit génial. Vous devez donc spécifier les dossiers libet includeséparément comme suit:

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

Cela ne fonctionnait toujours pas (même erreur libiconv), j'ai donc essayé de spécifier les trois bibliothèques requises (libxslt, libxml2 et 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

Maintenant, j'ai une erreur différente! C'était toujours une erreur mais au moins c'était différent. Le processus de création a échoué avec:

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

Euh, quoi? Après beaucoup de recherches sur Google, je suis tombé sur ce post miracle: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -architecture/

Apparemment, OSX Lion est livré avec de mauvaises versions de la bibliothèque libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) et elles doivent être remplacées par les dernières versions du SDK Xcode. L'article l'explique mieux que moi, alors lisez le lien ci-dessus pour obtenir des instructions spécifiques.

Une fois que ceux-ci ont été remplacés, j'ai couru

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

encore et tout allait bien. J'espère que ça aidera quelqu'un d'autre.


J'ai eu le même problème, mais j'ai trouvé que supprimer les fichiers suivants de opt / local / lib: libz.dylib et libz.1.dylib et suivre le reste de ces instructions a fait l'affaire.
Undistraction

1
Je pense que / opt / local désigne une installation MacPorts. Si vous utilisez homebrew et Macports, vous vous retrouverez avec un peu de funkiness (comme on le voit dans votre cas). La meilleure solution est de désinstaller Macports et d'utiliser homebrew pour votre gestionnaire de paquets.
Cory

J'ai ajouté une nouvelle solution plus simple pour Mavericks (OSX 10.9+) ci-dessous.
Micah Winkelspecht

17

J'ajoute simplement ma voix à la foule, mais mkmf.log a dit quelque chose à propos de l'impossibilité de trouver des symboles pour l'architecture x86_64. Je suis tombé sur cette solution:

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

Peut ne rien résoudre pour le demandeur d'origine, mais cela peut aider quelqu'un.

Note latérale: nokogiri a été mon plus grand obstacle à l'utilisation des applications rubis. Chaque fois que quelqu'un dépend d'une version différente, je dois trouver comment le construire. Et mon problème est différent à chaque fois.


1
D'accord avec votre sentiment nokogiri. Chaque. Célibataire. Temps.
jbnunn

Cela n'a pas fonctionné pour moi sous cette forme, mais a ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariestravaillé ...
bwoebi

Cela a fonctionné pour moi aussi, solution beaucoup plus simple, je n'ai pas utilisé les ARCHFLAGS, juste sudo gem install nokogiri - --use-system-bibliothèques
ryudice

8

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

cela a fonctionné pour moi sur macos. Cela fonctionne aussi avec la version1.6.6.4


A travaillé sans l' --with-xml2-includeoption pour moi sur Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
ryanc

6

J'utilise .. OS X 10.9.4 Homebrew 0.9.4

Voici mon résumé de ce fil pour installer avec succès nokogiri, en corrigeant libiconv manquant.

Installez Homebrew http://brew.sh/ Ou mettez à jour la dernière à l'aide de la commande ci-dessous

brew update

Installez libxml2 libxslt

brew install libxml2 libxslt

Lier les deux libxml2 libxslt

brew link libxml2 libxslt

Si vous recevez un avertissement pour utiliser --force, utilisez simplement la commande ci-dessous

brew link --force libxml2 libxslt

Installez les outils de commande xCode pour vous permettre d'installer libiconv

xcode-select --install

Installez 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

Dernière étape, installez 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

Je résolu ce problème en Yosemitecours d' exécution Ruby 2.1.4par

  1. assurez-vous que xCode 6.1 est installé, puis
  2. xcode-select --install, puis
  3. Dans l'AppStore, cliquez sur les mises à jour et installez la version la plus récente des outils de ligne de commande (ce qui apparemment xcode-select --installne fait pas - soupir)
  4. puis a bundle installfonctionné comme d'habitude.

J'ai aussi fait un brew install libiconvaussi mais je ne suis pas convaincu qu'une étape était nécessaire.


Je ne pense pas que ce brew install libiconvsoit nécessaire - je n'ai jamais pris la peine de trouver le bon package et cela a bien fonctionné pour moi. Certes, cela peut avoir été sur ma machine depuis le moment où j'ai installé nokogiri avec ruby ​​2.1.1 auparavant.
jmstone617

"Dans l'AppStore, cliquez sur les mises à jour et installez la version la plus récente des outils de ligne de commande (ce que xcode-select --install ne fait apparemment pas - soupir)" - aucune mise à jour n'est disponible. Comment mettre à jour mes outils de ligne de commande à partir de Xcode? Ils n'apparaissent pas dans la section "Téléchargements" du volet des préférences.
chadoh

Cela a fonctionné pour moi sans aller sur l'App Store. J'ai mis à jour les outils de ligne de commande et le système d'exploitation (vers Yosemite), puis xcode-select --installj'ai couru et j'ai pu installer Nokogiri.
acier

Je devais faire: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-bibliothèques .. bundle install
Zack Burt

4

J'ai essayé beaucoup de choses mais rien n'a fonctionné pour moi. Ensuite, j'ai enfin trouvé la documentation iconv et cela m'a sauvé la journée!


Merci beaucoup. Cela m'a aussi sauvé la journée.
pisaruk

3

En regardant dans le fichier mkmf, il semble que nokogiri (ou gem, je ne sais pas) essaie de trouver des dépendances dans / op / local /. Pour moi, ce n'est pas la bonne voie pour les rechercher.

Forcer nokogiri à trouver les libs au bon endroit (j'utilise homebrew) a fait l'affaire pour moi:

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

Peut-être qu'il y a quelque chose à réparer dans nokogiri ...

HTH,


3

libiconv a été supprimé de Homebrew 0.9 Il est maintenant recommandé de compiler libiconv à partir des sources, puis de référencer l'installation lorsque vous installez le gem nokogiri. Voir les instructions d'installation de Nokogiri dans la section Homebrew 0.9 sur la page d'installation de Nokogiri


À partir d'aujourd'hui, j'ai pu exécuter $ brew install libiconv et il a téléchargé et installé libiconv-1.14.tar.gz
Evolve

2

Regardez dans le fichier mkmf.log dans le répertoire de construction du gem (par exemple /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Cela a beaucoup plus d'informations. Dans mon cas, quand j'ai frappé ceci, c'est que Nokogiri ajoute spécifiquement / opt / local / lib au chemin de recherche de la bibliothèque et GNU Backgammon y avait installé une libiconv incompatible.


2

En supposant que vous ayez installé libxml2 et libxslt avec MacPorts, vous pourriez toujours obtenir cette erreur en raison d'une incompatibilité de l'ordre des chemins d'inclusion et des chemins de lien utilisés par l'appel à have_func ('iconv_open', 'iconv.h')

Solution simple (patch): supprimez libiconv. * Dans / usr / local / lib


J'ai installé libxml2 et libxslt avec MacPorts, mais il n'y a pas de fichiers libiconv. * Dans / 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/

comme ci-dessus, c'est la solution pour les homebrews et l'utilisation de gem install (appliquer les modifications dépend de votre version)

cependant, si vous utilisez Gemfile et l'installation du bundle, vous devez appliquer la configuration du bundle avant d'installer, voici le 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

encore une fois, appliquer les modifications dépend de votre version

J'espère que ceci vous aidera.

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


2

J'ai eu des problèmes similaires sur Mountain Lion. Il s'avère que j'avais déjà installé libiconv via le package rvm et que ce n'est plus nécessaire pour ruby ​​1.9.3 / Mountain Lion / nokogiri.

Suivant les conseils de https://rvm.io/packages/ , j'ai supprimé mon répertoire $ rvm_path / usr et reconstruit ruby ​​1.9.3. Par la suite, l'installation de nokogiri était une simple installation de gemme. Pas de problème avec les installations de brew / macports / sources manuelles!


2

Vous pouvez également le faire sur Mavericks:

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

Assurez-vous simplement que xcode est installé


la même solution fonctionne également pour la version 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

Je me battais avec Nokogiri pendant un moment aujourd'hui sur OS X 10.10 Yosemite

Mon environnement était en désordre pour une raison quelconque.

which bundleet which gemme donnaient /usr/bin/bundleet /usr/bin/gemau lieu de~/.rbenv/shims/gem

Ce qui m'a aidé à le corriger était sudo rm -i /usr/bin/gem /usr/bin/bundle

Après cela, j'ai: 1. retourné au répertoire de mon projet 2. désinstallé les dépendants 3. (ré) -installé les libs dépendants: fait un brew install libxml2 libiconv libxslt 4. installé ma version ruby ​​fraîche (avec rbenv) 5. fait gem install bundler 6. et bundle installexécuté sans aucune problèmes.

Nokogiri était bien après cela.

Pour référence:

╰─% 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
Avec le recul (qui est toujours 20/20), j'aurais probablement pu ajuster ma variable d'environnement PATH pour ajouter d'abord rbenv.
Sam Figueroa

1

Vous devez mettre à jour votre homebrew vers 0.9

puis suivez ces étapes

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

Vous devez vérifier la version de la bibliothèque de dossiers.


Link et sudo casseront les choses. Ils sont uniquement en fût pour plusieurs raisons. Utilisez des formules d'infusion car il est beaucoup plus facile à entretenir. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv

1

UTILISATEURS HOMEBREW

Solution correcte pour résoudre ce problème si vous utilisez homebrew:

xcode-select --install

Choisissez "Get Xcode" dans la boîte de dialogue.

brew unlink libiconv
gem install nokogiri

L'étape xcode-select corrige votre installation Xcode et Xcode Command Line Utils. J'ai trouvé que je n'avais pas /usr/include/iconv.h en raison d'une sorte de problème avec les mises à niveau O / S ou les restaurations à partir de sauvegardes. Si vous n'avez pas ce fichier d'en-tête et /usr/lib/libconv.dylib après avoir exécuté xcode-select, vous devrez probablement faire glisser Xcode du dossier Application vers la corbeille et réinstaller puis télécharger manuellement les outils de ligne de commande pour Xcode à partir de https://developer.apple.com/downloads/index.action et installez-le.

Ensuite, vous devez dissocier le libiconv de homebrew. Vous n'en avez pas besoin. Et clang récupérera en fait /usr/local/include/iconv.h sur /usr/include/iconv.h et #define iconv_open en libiconv_open mais établira ensuite un lien avec /usr/lib/libiconv.dylib qui n'a pas libiconv_open qui est ce qui cause l'échec de mkmf à trouver libiconv. Ce que vous devez faire est de supprimer le lien dans iconv.h afin que nokogiri ne le trouve pas.

Ensuite, construisez simplement nokogiri normalement.

Pour les nouveaux utilisateurs, tout ce que vous devriez faire est d'installer xcode avec xcode-select et d'installer nokogiri, mais si vous avez trouvé cette question, vous avez probablement une installation bâclée et non une nouvelle installation de Mavericks.

Certaines des autres réponses ici sont certainement incorrectes. La plupart d'entre eux essaient d'utiliser libiconv en dehors de l'homebrew, ce qui est totalement inutile. Les réponses qui brew link libiconvcausent réellement le problème où clang devient confus et essaie de lire un fichier d'en-tête homebrew et de créer un lien avec les bibliothèques système. Les réponses --use-system-librariessuggérées sont médiocres car nokogiri doit être lié à ses bibliothèques libxml2 et libxslt intégrées car les autres versions de ces bibliothèques sont incompatibles avec lui. Les réponses qui veulent que vous compiliez à partir de sources sont tout simplement excessivement compliquées.

TL; DR:

  • Mettez à niveau et / ou réparez votre installation Xcode
  • Dissociez votre homebrew libiconv car vous essayez de l'utiliser qui ne pose que des problèmes
  • Construisez nokogiri normalement

UTILISATEURS RVM

Les anciennes installations RVM peuvent avoir un libiconv caché dans vos répertoires rvm quelque part en conflit avec vos bibliothèques système. Voir https://stackoverflow.com/a/11809261/506908 pour plus d'informations.

UTILISATEURS MacPorts

Si vous avez /opt/local/lib/libiconv.dylib, nokogiri ajoute ce chemin à la liste des répertoires qu'il recherche et il trouvera l'installation de MacPorts similaire à la façon dont il récupère le homebrew libiconv et entre en conflit avec les bibliothèques système. Tu peux essayer:

sudo port uninstall libiconv

Si cela échoue en raison de dépendances, vous pouvez essayer de lier directement la version MacPorts (non testée):

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

La confirmation gem install nokogiri -- --with-iconv-dir=/opt/localfonctionne très bien avec MacPorts libiconvinstallé
PartialOrder

1

Celui-ci a fonctionné pour moi

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


c'était le combo de --use-system-bibliothèques et --with-iconv-dir qui l'a fait pour moi
aaaarrgh

0

Je suis tombé sur ça, ce matin ... après une mise à niveau vers Mavericks. Nous avons fait beaucoup de choses. Cependant, si quelqu'un a ce problème, voici quelques choses à essayer.

J'ai exécuté 'xcode-select --install' puis j'ai installé les outils de ligne de commande (surpris que cela n'ait pas été mis à jour lors de la mise à niveau du système d'exploitation). J'ai lancé 'rvm implode' (je le reconstruirai plus tard).

Nous avons reconstitué deux fichiers de sortie d'erreur:

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

Ce qui semblait indiquer que le compilateur c utilisait un paramètre surprenant.

J'ai couru 'env'

Sortie contenue:

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

Ces fichiers n'existaient pas sur le système de fichiers ...

Après tous ces changements, passer à une nouvelle fenêtre de terminal (donc tout était frais). L'installation de vagrant-berkshelf (qui à son tour installe nokogiri) a bien fonctionné.

REMARQUE: lors de l'exécution de 'env' dans la nouvelle fenêtre, il n'y avait plus de paramètre pour CC ou CXX ...

Incertain sur la partie clé de ceci, ou si l'ordre est important, mais a essayé de recréer les parties qui semblaient jouer un rôle pour que cela fonctionne.


Êtes-vous sûr que la commande gem install nokogiriréussit? Wither avec le message «déjà installé» ou une installation réussie?
Spundun

Oui. J'ai réinstallé rvm et oh-my-zsh pendant que je reconstruisais des choses sur mon Mac. Ce que je n'ai pas pu comprendre, c'est comment installer nokogiri sur un jeu de gemmes rvm. Lorsque je reviens au «système d'utilisation de rvm», je peux installer nokogiri 1.6.3.1 par-dessus le 1.5.6 qui vient sur l'OS X ruby ​​2.0.0p451.
aaron blythe

En fin de compte, pour moi, c'était stackoverflow.com/questions/19643153/… brew uninstall apple-gcc42 brew install apple-gcc42
aaron blythe

0

Selon la documentation, à partir d'OSX 10.9 et Homebrew 9.5+, il vous manque probablement les outils de développement.

Installation de Nokogiri

Dépannage

Si vous rencontrez des problèmes en mentionnant l'absence de libiconv qui ressemble à ceci:

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

Ensuite, il vous manque probablement les bons outils de développement. C'est une solution vraiment simple:

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

Ceci est vérifié en travaillant sur le compilateur clang d'OSX 10.9 w / xcode.


0

J'ai eu ce problème lorsque j'ai mis à niveau mon Mac OS vers Yosemite. J'ai pu résoudre ce problème en faisant:

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

0

J'avais un problème similaire et la réponse acceptée fonctionnait pour moi. Maintenant, cependant, j'ai vu un nouveau message d'erreur où une gmkdircommande est manquante comme dans cette question:

gem installer nokogiri -v '1.5.11' a échoué en raison de make: / usr / local / bin / gmkdir: aucun fichier ou répertoire de ce type

Ce qui a fonctionné pour moi, c'est d'abord un petit nettoyage:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

Et puis brew unlink libiconvet tout ce dont vous avez besoin pour dissocier (vérifiez avec brew doctor). Ensuite, les deux lignes magiques (copiées à partir de la réponse liée):

brew install coreutils
gem install nokogiri

0

Étapes simples à suivre avant de commencer à désinstaller et à installer quoi que ce soit. Vérifiez si vous avez CLT (outils de ligne de commande installés):

brew config

voir la version CLT ici si elle est installée sans besoin de réinstallation.

Cela signifie que le problème est avec la permission que vous avez réinstallé uniquement le gem de bundler, ce qui n'est pas sudo. Désinstaller le bundler avec gem uninstall bundler réinstaller le bundler gem gem install bundler

Le point le plus important ici est la permission sous laquelle le bundler gem est installé, il ne doit jamais être sudoed.


-1

Assurez-vous tout d'abord de suivre le guide d'installation sur nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Après avoir suivi le guide, j'avais toujours ce problème. Voici comment je l'ai résolu:

Tout d'abord, j'ai installé iconv en utilisant homebrew: brew install iconv

Ensuite, j'ai désinstallé ruby, heureusement c'est très facile avec rvm:

rvm uninstall 1.9.2        

Ensuite, j'ai dû réinstaller ruby ​​avec les options suivantes:

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

Ensuite, je crée un ensemble de gemmes avec la nouvelle version ruby:

rvm use 1.9.2@coolproject

Ensuite, je peux enfin installer nokogiri comme ceci:

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

Dans mon cas, (comme avec scotchi) la construction a échoué en raison d'une bibliothèque iconv incompatible dans / opt / local / lib. Par défaut, le processus de construction de Nokogiri regarde d'abord / opt / local. Pour le forcer à utiliser un autre répertoire d'installation, / usr / local par exemple, faites:

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

Ce billet de blog propose d'installer libiconv manuellement.

Par la suite, nokogiri peut être installé avec un certain nombre de commutateurs lui indiquant où trouver libiconv (voir l'article du blog).

En remarque: après avoir installé nokogiri, j'ai réussi à installer gollum (dont l'installation a également échoué car il n'a pas pu trouver iconv). Maintenant, je suis toujours confronté à des problèmes, car lorsque je lance gollum, Python plante.


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

NOTEZ LE fichier /lib/iconv/iconv.so MANQUANT dans 2.0.0-p247 qui est présent dans l'installation de gems 2.0.0-p0.

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

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

Copiez le fichier

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

MAINTENANT ÇA MARCHE!

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

Remarque: je travaille avec rbenv, mais ce problème est spécifique à l'installation de gem et il devrait être corrigé en amont!
Darren Weber

cette réponse n'a rien à voir avec la bibliothèque C libiconv dont dépend la construction de nokogiri. La réponse doit vraiment être supprimée.
lamont

-1

J'ai dû installer gcc avant de courir ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.