Por que a instalação do Nokogiri no Mac OS falha com o libiconv está ausente?

159

Eu tenho tentado instalar o Nokogiri no Mac OS 10.9.3 e o que eu tentar, a instalação falha no final com a seguinte mensagem de erro:

$ 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

Depois de seguir muita ajuda encontrada na web, incluindo a criação e instalação do libxml2 e libxslt usando o brew e a criação do libiconv a partir das fontes (conforme descrito em " Instalando o Nokogiri "), o erro permanece o mesmo.

Ao tentar executar a instalação do Nokogiri, a libxml2 e a libxslt parecem ser encontradas corretamente, mas não a libiconv.

Alguém com um conhecimento melhor dessas coisas sabe como instalar o Nokogiri?

polarblau
fonte
Você não mostra os comandos exatos que está tentando usar, por isso, filmaremos no escuro tentando responder. Eu sempre uso gem install nokogiri, mas depois uso o RVM para gerenciar minhas instalações do Mac OS Ruby. libxml e libxslt não estão relacionados ao iconv, então eu recomendo fazer sua pergunta no Nokogiri-talk, que é o fórum de suporte. Não me lembro de ter nenhum problema de iconv ao instalar o Nokogiri, e o tenho em várias máquinas.
the Tin Man
1
Enquanto isso, abri um ticket no github: github.com/tenderlove/nokogiri/issues/442, que contém um pouco mais de informação.
polarblau
2
Aqui está um link para resolver o mesmo problema no OSX El Capitan, estebantorr.es/blog/2015/10/02/Nokogiri-in-El-Capitan
sbs
" sudo gem install nokogiri" Não use sudopara instalar gemas ou modificar o Ruby padrão. Em vez disso, use rbenv ou RVM para gerenciar um Ruby separado. Isso é abordado várias vezes no estouro de pilha.
the Tin Man
Você já tentou desinstalar o xz antes da instalação do nokogiri?
lifeisfoo

Respostas:

237

Eu tive o mesmo problema. Infelizmente, o " Instalando Nokogiri " não cobre problemas com o Iconv. Veja como eu resolvi o problema.

Primeiro instale o homebrew , isso facilitará sua vida. Se você já o tem instalado, pegue as fórmulas mais recentes atualizando da seguinte maneira:

brew update

Nota : No OSX 10.9+, pode ser necessário instalar as ferramentas de comando xCode para permitir a instalação do libiconv.

xcode-select --install

em seguida, instale uma versão mais recente do libiconv

brew install libiconv

então instale sua gema

gem install nokogiri -- --with-iconv-dir=/usr/local/Cellar/libiconv/1.14
Cory
fonte
5
Depois que eu fiz o "brew install libiconv" e o "brew link libiconv", consegui instalar o nokogiri com sucesso. Espero que isso signifique que não tenho uma dependência difícil da versão específica do libiconv instalada pelo brew.
Steven Chanin
87
Quando tento brew install libiconvcuspir: Erro: Nenhuma fórmula disponível para o libiconv A Apple distribui o libiconv com o OS X, você pode encontrá-lo em / usr / lib. Alguns scripts de construção falham ao detectá-lo corretamente, verifique as fórmulas existentes para soluções.
Seth Bro
62
Se você estiver executando Mavericks, você pode precisar instalar ferramentas de linha de comando do Xcode: xcode-select --install. Isso corrigiu o problema para mim.
Michael Stalker
34
Se você ainda não consegue brew install libiconvobter a fórmula correta, use o seguinte:brew tap homebrew/dupes
jamesdlivesinatree
15
OS X Yosemite(10.10) Eu não precisava fazer as brewcoisas; apenas o xcode-select --installcorrigiu esse problema para mim.
precisa saber é o seguinte
84

Tente usar as bibliotecas do sistema. O OSX vem com o libiconv em versões mais recentes, mas o script de instalação padrão parece ter um problema

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

Edit: Se estiver usando o bundler, como mencionado por Geoff, você pode fazer:

bundle config build.nokogiri --use-system-libraries
Filip Kis
fonte
5
Se estiver usando o bundler - você pode executar "bundle config build.nokogiri --use-system-libraries"
Geoff Evason
1
finalmente, "a configuração do pacote configurável build.nokogiri --use-system-libraries" funcionou. Eu odeio quando isso acontece
nils Petersohn
1
Trabalhou para mim no Mac OS 10.10 Yosemite.
Lloyd Dewolf
por que preciso do "-" extra no meio do comando gem install?
Rembrandt P. Einstein
3
Falha para mim na 10.10.3. Xcode 6.3 com libxml2 version 2.6.21 or later is required!.
Rivera
36

A solução da @ Cory contém a resposta correta, mas a solução do Mavericks é realmente muito mais simples que a solução principal, por isso estou publicando apenas as etapas necessárias.

No Mavericks (OSX 10.9+):

Instale as ferramentas de linha de comando do Xcode:

xcode-select --install

instale sua joia:

gem install nokogiri
Micah Winkelspecht
fonte
4
Trabalhos em Yosemite. Tão feliz que rolei para baixo e não usei respostas mais antigas.
yuяi
enorme economia de tempo, obrigado por esta dica! trabalhou um encanto para mim em mavericks
sorvete
Você tentou usar minha solução? Não requer a instalação do xcode.
Filip Kis
Esta é a solução oficial dos documentos Nokogiri ( nokogiri.org/tutorials/installing_nokogiri.html#mac_os_x ) e a única que trabalhou no El Capitan. A solução aceita não funcionou lá.
Johannes
Trabalhou para mim no El Capitan, tão irritante. Obrigado pelo link para Nokogiri docs @Johannes - realmente útil. Todos devem ficar longe das soluções que dizem "usar bibliotecas do sistema" - um mau conselho.
usar o seguinte código
19

Eu finalmente consegui resolver esse problema. Nenhuma das soluções acima a corrigiu completamente para mim.

Eu estava recebendo esse erro ao tentar gem install nokogirino OSX Lion 10.7.2. Antes de tudo, esse erro oculta o problema real, dizendo que o libiconv está ausente, porque você receberá o mesmo erro mesmo que o nokogiri não consiga encontrar o libxslt ou o libxml2, o que, no meu caso, não foi possível.

Então, segui as instruções em http://nokogiri.org/tutorials/installing_nokogiri.html na seção Homebrew (ligeiramente modificada para dar conta de uma versão mais atual da 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

Nesse ponto, segui as instruções no site de nokogiri e tentei

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

No entanto, isso ainda falhou porque, ao criar o libxslt a partir do código-fonte, ele instala a /includepasta em um local desagradável. Então, você precisa especificar as pastas libe includeseparadamente da seguinte maneira:

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

Como ainda não funcionou (o mesmo erro do libiconv), tentei especificar todas as três bibliotecas necessárias (libxslt, libxml2 e libiconv):

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

Agora eu tenho um erro diferente! Ainda era um erro, mas pelo menos era diferente. O processo de fabricação falhou com:

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

Uhh o que? Depois de pesquisar bastante, me deparei com este post milagroso: http://www.refresherate.com/2010/01/08/fixing-ld-warning-in-usrlocalliblibz-dylib-file-is-not-of-required -arquitetura/

Aparentemente, o OSX Lion é fornecido com algumas versões ruins da biblioteca libz ( libz.dylib, libz.1.dylib, libz.1.2.4.dylib) e elas precisam ser substituídas pelas versões mais recentes do Xcode SDK. O artigo explica melhor do que eu posso ler o link acima para obter instruções específicas.

Uma vez substituídos, corri

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

novamente e tudo estava bem. Espero que isto ajude alguém.

Micah Winkelspecht
fonte
Eu tive o mesmo problema, mas achei que remover os seguintes arquivos de opt / local / lib: libz.dylib e libz.1.dylib e seguir o restante dessas instruções foi o que fez.
Undistraction
1
Eu acho que / opt / local denota uma instalação do MacPorts. Se você estiver executando o homebrew e o Macports, terá alguns problemas (como visto no seu caso). A melhor solução é desinstalar o Macports e usar o homebrew no gerenciador de pacotes.
Cory
Adicionei uma nova solução mais simples para o Mavericks (OSX 10.9+) abaixo.
Micah Winkelspecht
17

Apenas adicionei minha voz à multidão, mas o mkmf.log disse algo sobre não conseguir encontrar símbolos para a arquitetura x86_64. Eu me deparei com esta solução:

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

Pode não resolver nada do solicitante original, mas isso pode ajudar alguém.

Nota lateral: nokogiri tem sido minha maior barreira para o uso de aplicativos ruby. Toda vez que alguém depende de uma versão diferente, tenho que descobrir como construí-la. E meu problema é diferente toda vez.

nbering
fonte
1
Concordou com o seu sentimento nokogiri. Cada. Solteiro. Tempo.
jbnunn
Não funcionou para mim nesta forma, mas ARCHFLAGS="-arch x86_64" sudo gem install nokogiri -- --use-system-librariesfuncionou ...
bwoebi
Isso funcionou para mim, bem como, solução muito mais fácil, eu não usar os ARCHFLAGS, apenas gem sudo instalar nokogiri - o sistema --use-bibliotecas
ryudice
8

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

isso funcionou para mim no macos. Funciona também com versão1.6.6.4

Prashant Kajale
fonte
Trabalhou sem a --with-xml2-includeopção para mim na Catalina ... gem install nokogiri --version=1.6.6.2 -- --use-system-libraries
ryanc 07/04
6

Estou usando .. OS X 10.9.4 Homebrew 0.9.4

Aqui está o meu verão deste tópico para instalar com êxito o nokogiri, corrigindo a falta do libiconv.

Instale o Homebrew http://brew.sh/ Ou atualize para o mais recente usando o comando abaixo

brew update

Instale libxml2 libxslt

brew install libxml2 libxslt

Vincule ambos libxml2 libxslt

brew link libxml2 libxslt

Se você receber um aviso para usar --force, basta usar o comando abaixo

brew link --force libxml2 libxslt

Instale as ferramentas de comando do xCode para permitir a instalação do libiconv

xcode-select --install

Instale o 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

Etapa final, instale 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
Kevin Ng
fonte
5

Eu resolvi isso em Yosemiteexecução Ruby 2.1.4por

  1. verifique se o xCode 6.1 está instalado e, em seguida,
  2. xcode-select --install, então
  3. Na AppStore, clique em atualizações e instale a versão mais recente das ferramentas de linha de comando (o que aparentemente xcode-select --installnão funciona - suspiro)
  4. então bundle installfuncionou normalmente.

Também fiz o brew install libiconvmesmo, mas não estou convencido de que essa etapa fosse necessária.

Dave Sag
fonte
Não acredito que brew install libiconvseja necessário - nunca me preocupei em encontrar o pacote adequado e isso funcionou bem para mim. É verdade que pode estar na minha máquina desde quando instalei o nokogiri com o ruby ​​2.1.1 antes.
jmstone617
"Na AppStore, clique em atualizações e instale a versão mais recente das ferramentas de linha de comando (que aparentemente xcode-select - a instalação não faz - suspiro)" - não há atualizações disponíveis. Como atualizo minhas ferramentas de linha de comando do Xcode? Eles não aparecem na seção "Downloads" do painel de preferências.
chadoh
Isso funcionou para mim sem ir à loja de aplicativos. Atualizei as ferramentas de linha de comando e o SO (para Yosemite), depois executei xcode-select --installe consegui instalar o Nokogiri.
steel
Eu tinha que fazer: xcode-select --install .. brew install libxml2 .. bundle config build.nokogiri --use-system-libraries .. bundle install
Zack Burt
4

Eu tentei muitas coisas, mas nada funcionou para mim. Finalmente encontrei a documentação do iconv e ela salvou o meu dia!

Kamil Sarna
fonte
Muito obrigado. Também salvou o meu dia.
pisaruk 30/05
3

Olhando no arquivo mkmf, parece que nokogiri (ou gem, eu não sei) tenta encontrar dependências em / op / local /. Para mim, não é o caminho certo para procurá-los.

Forçar nokogiri a encontrar as bibliotecas no lugar certo (eu uso o homebrew) fez o truque para mim:

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

Talvez haja algo para corrigir em nokogiri ...

HTH,

Stéphane Akkaoui
fonte
3

O libiconv foi removido do Homebrew 0.9 Agora é recomendável compilar o libiconv a partir do código-fonte e, em seguida, referenciar a instalação ao instalar a nokogiri gem. Consulte as instruções de instalação do Nokogiri na seção Homebrew 0.9 na página de instalação do Nokogiri

SupaIrish
fonte
A partir de hoje eu era capaz de rodar o $ brew install libiconv e ele baixava e instalava o libiconv-1.14.tar.gz
Evolve
2

Procure no arquivo mkmf.log no diretório de compilação do gem (por exemplo, /Library/Ruby/Gems/1.8/gems/nokogiri-1.4.4/ext/nokogiri/mkmf.log). Isso tem muito mais informações. No meu caso, quando cheguei a isso, foi que Nokogiri adiciona especificamente / opt / local / lib ao caminho de pesquisa da biblioteca e o GNU Backgammon havia instalado um libiconv incompatível lá.

escocês
fonte
2

Supondo que você tenha instalado o libxml2 e o libxslt com o MacPorts, ainda assim poderá estar recebendo esse erro devido a uma incompatibilidade da ordem dos caminhos de inclusão e de link usados ​​pela chamada para have_func ('iconv_open', 'iconv.h')

Solução simples (patch): exclua libiconv. * Em / usr / local / lib

Mick West
fonte
Eu tenho libxml2 e libxslt instalado com MacPorts, mas não há libiconv * arquivos em / 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/

Mesmo que acima, esta é a solução para homebrew e usando gem install (aplicar as alterações depende da sua versão)

no entanto, se você usar o Gemfile e a instalação do pacote configurável, deverá aplicar a configuração do pacote configurável antes de instalar, aqui o código

$ 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

novamente, aplicar as alterações depende da sua versão

espero que isso ajude você.

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

RacsO
fonte
2

Eu tive problemas semelhantes no Mountain Lion. Acontece que eu tinha instalado o libiconv via rvm anteriormente e isso não é mais necessário para o ruby ​​1.9.3 / Mountain Lion / nokogiri.

Seguindo o conselho de https://rvm.io/packages/ , excluí meu diretório $ rvm_path / usr e reconstruí o ruby ​​1.9.3. Posteriormente, instalar nokogiri foi uma instalação simples de gemas. Não brinque com instalações de fontes brew / macports / manual!

Mike
fonte
2

Você também pode fazer isso no Mavericks:

gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Aplicativos / Xcode.app / Conteúdo / Desenvolvedor / Plataformas / MacOSX.platform / Desenvolvedor / SDKs / MacOSX10.9.sdk / usr / include / libxml2

Apenas certifique-se de ter o xcode instalado

Sam Rosen
fonte
A mesma solução também funciona para a versão 10.7.5: gem install nokogiri - --use-system-libraries = true --with-xml2-include = / Aplicativos / Xcode.app / Conteúdo / Desenvolvedor / Plataformas / MacOSX.platform / Desenvolvedor /SDKs/MacOSX10.7.sdk/usr/include/libxml2
tolginho
2

Eu estava lutando com Nokogiri por um tempo hoje no OS X 10.10 Yosemite

Meu ambiente estava bagunçado por algum motivo.

which bundlee which gemestavam me dando /usr/bin/bundlee em /usr/bin/gemvez de~/.rbenv/shims/gem

O que ajudou a corrigi-lo para mim foi sudo rm -i /usr/bin/gem /usr/bin/bundle

Depois disso eu: 1. retornei ao diretório do meu projeto 2. desinstalei o dependente 3. (re) instalei as bibliotecas dependentes: fiz a brew install libxml2 libiconv libxslt 4. instalei minha versão ruby ​​fresca (com rbenv) 5. fiz gem install bundler 6. e bundle installexecutei sem problemas

Nokogiri estava bem depois disso.

Para referência:

╰─% 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
Sam Figueroa
fonte
1
Em retrospectiva (que é sempre 20/20), eu provavelmente poderia ter ajustado minha variável env do PATH para prefixar rbenv primeiro.
Sam Figueroa
1

Você precisa atualizar seu homebrew para 0,9

siga estas etapas

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

Você deve verificar a versão da biblioteca de pastas.

Ilake Chang
fonte
Link e sudo vão quebrar as coisas. Eles são apenas barris por várias razões. Use fórmulas de fermentação porque é muito mais fácil manter. brew create http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz && brew install libiconv
1

HOMEBREW USUÁRIOS

Solução correta para corrigir esse problema se você estiver usando o homebrew:

xcode-select --install

Escolha "Obter Xcode" na caixa de diálogo.

brew unlink libiconv
gem install nokogiri

A etapa de seleção do xcode corrige a instalação do Xcode e a instalação do Xcode Command Line Utils. Descobri que não tinha o /usr/include/iconv.h devido a algum tipo de problema com atualizações ou restaurações de O / S de backups. Se você não tiver esse arquivo de cabeçalho e /usr/lib/libconv.dylib após executar o xcode-select, provavelmente precisará arrastar o Xcode da pasta Application para a lixeira e reinstalar e, em seguida, baixar manualmente as ferramentas de linha de comando do Xcode em https://developer.apple.com/downloads/index.action e instale-o.

Então você precisa desvincular o libiconv do homebrew. Você não precisa disso. E o clang realmente seleciona /usr/local/include/iconv.h sobre /usr/include/iconv.h e #define iconv_open para libiconv_open, mas depois vincula-se ao /usr/lib/libiconv.dylib que não possui libiconv_open é o que faz com que as falhas do mkmf encontrem o libiconv. O que você precisa fazer é remover o link do iconv.h para que o nokogiri não o encontre.

Então apenas construa nokogiri normalmente.

Para novos usuários, tudo o que você precisa fazer é instalar o xcode com xcode-select e instalar nokogiri, mas se você encontrou essa pergunta, provavelmente terá uma instalação defeituosa e não uma nova instalação do Mavericks.

Algumas das outras respostas aqui estão definitivamente incorretas. A maioria deles tenta usar o libiconv do homebrew, o que é totalmente desnecessário. As respostas que brew link libiconvrealmente estão causando o problema em que o clang se torna confuso e tentam ler um arquivo de cabeçalho de homebrew e vincular-se às bibliotecas do sistema. As respostas sugeridas --use-system-librariessão ruins porque o nokogiri precisa ser vinculado às bibliotecas empacotadas libxml2 e libxslt porque outras versões dessas bibliotecas são incompatíveis com ele. As respostas que você deseja compilar a partir de fontes são irremediavelmente complicadas demais.

TL; DR:

  • Atualize e / ou repare sua instalação do Xcode
  • Desvincule o libiconv do homebrew, já que tentar usar isso apenas causa problemas
  • Construa nokogiri normalmente

USUÁRIOS RVM

As instalações antigas do RVM podem ter um libiconv oculto nos diretórios rvm em algum lugar que esteja em conflito com as bibliotecas do sistema. Consulte https://stackoverflow.com/a/11809261/506908 para obter mais informações.

USUÁRIOS MacPorts

Se você tiver /opt/local/lib/libiconv.dylib, o nokogiri adicionará esse caminho à lista de diretórios que ele procura e encontrará a instalação do MacPorts semelhante à maneira como ele pega o libiconv homebrew e entra em conflito com as bibliotecas do sistema. Podes tentar:

sudo port uninstall libiconv

Se isso falhar devido a dependências, você pode tentar vincular diretamente à versão MacPorts (não testada):

gem install nokogiri -- --with-iconv-dir=/opt/local
Lamont
fonte
Confirmando gem install nokogiri -- --with-iconv-dir=/opt/localfunciona muito bem com MacPorts libiconvinstalado
PartialOrder
1

Este funcionou para mim

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

Chen Kinnrot
fonte
foi a combinação de --use-system-libraries e --with-iconv-dir que fez isso por mim
aaaarrgh
0

Encontrei isso hoje de manhã ... depois de uma atualização para o Mavericks. Nós fizemos muitas coisas. No entanto, se alguém está tendo esse problema, aqui estão algumas coisas para tentar.

Executei o 'xcode-select --install' e instalei as ferramentas de linha de comando (surpresa que isso não tenha sido atualizado no ugrade do sistema operacional). Eu executei o 'rvm implode' (eu o compilarei mais tarde).

Reunimos dois arquivos de saída de erro:

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

O que parecia indicar que o compilador c estava usando uma configuração surpreendente.

Eu corri 'env'

Saída contida:

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

Esses arquivos não existiam no sistema de arquivos ...

Depois de todas essas mudanças, mudamos para uma nova janela do terminal (tudo estava atualizado). A instalação do vagrant-berkshelf (que por sua vez instala nokogiri) funcionou bem.

NOTA: ao executar 'env' na nova janela, não havia mais uma configuração para CC ou CXX ...

Não tenho certeza sobre a parte principal disso, ou se a ordem é importante, mas tentou recriar as partes que pareciam ter um papel importante para que isso funcionasse.

aaron blythe
fonte
Você tem certeza de que o comando foi gem install nokogiribem-sucedido? Murchar com a mensagem "já instalado" ou com uma instalação bem-sucedida?
Spundun 04/08/19
Sim. Reinstalei o rvm e o oh-my-zsh à medida que construí as coisas no meu Mac. O que não consegui descobrir é como instalar o nokogiri em um conjunto de gemas rvm. Quando volto ao 'rvm use system', posso instalar o nokogiri 1.6.3.1 por cima do 1.5.6 que vem no OS X ruby ​​2.0.0p451.
Aaron blythe
No final, para mim foi stackoverflow.com/questions/19643153/... preparar desinstalação maçã-gcc42 Brew instalar maçã-gcc42
Aaron Blythe
0

De acordo com a documentação, no OSX 10.9 e no Homebrew 9.5+, você provavelmente está perdendo as ferramentas de desenvolvimento.

Instalação de Nokogiri

Solução de problemas

Se você tiver problemas ao mencionar a falta do libiconv, é algo parecido com isto:

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

Então você provavelmente está perdendo as ferramentas de desenvolvedor certas. Esta é uma correção muito fácil:

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

Isso é verificado trabalhando no compilador clang do OSX 10.9 com xcode.

rexmadden
fonte
0

Eu entendi esse problema quando atualizei meu Mac OS para Yosemite. Consegui resolver esse problema fazendo:

xcode-select --install
brew uninstall libiconv
brew install libiconv
gem install nokogiri
Lalu
fonte
0

Eu tive um problema semelhante e a resposta aceita costumava funcionar para mim. Agora, no entanto, tenho visto uma nova mensagem de erro em que um gmkdircomando está ausente, como nesta pergunta:

gem install nokogiri -v '1.5.11' falhou devido ao make: / usr / local / bin / gmkdir: Esse arquivo ou diretório não existe

O que funcionou para mim foi primeiro uma pequena limpeza:

brew uninstall libiconv
brew uninstall libxml2
brew uninstall libxslt

E então brew unlink libiconve o que mais você precisar desvincular (verifique com brew doctor). Em seguida, as duas linhas mágicas (copiadas da resposta vinculada):

brew install coreutils
gem install nokogiri
Skensell
fonte
0

Etapas simples a serem seguidas antes de começar a desinstalar e instalar qualquer coisa. Verifique se você possui o CLT (ferramentas de linha de comando instaladas):

brew config

consulte a versão do CLT aqui, se não houver necessidade de reinstalação.

Isso significa que o problema está com a permissão de reinstalar apenas o bundler gem e não o sudo. Desinstalar bundler com gem uninstall bundler reinstalar gem bundler gem install bundler

O ponto mais importante aqui é a permissão sob a qual o bundler gem está instalado e nunca deve ser sudoed.

Pikachu-go
fonte
-1

Antes de tudo, certifique-se de seguir o guia de instalação nokogiri: http://nokogiri.org/tutorials/installing_nokogiri.html

Depois de seguir o guia, eu ainda tinha esse problema. Foi assim que eu resolvi:

Antes de tudo, instalei o iconv usando o homebrew: brew install iconv

Então eu desinstalei o ruby, felizmente isso é muito fácil com o rvm:

rvm uninstall 1.9.2        

Então tive que reinstalar o ruby ​​com as seguintes opções:

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

Então eu crio um gemset com a nova versão ruby:

rvm use 1.9.2@coolproject

Finalmente posso instalar o nokogiri assim:

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
Brian Jensen
fonte
-1

No meu caso, (como no scotchi), a compilação falhou devido a uma biblioteca iconv incompatível em / opt / local / lib. Por padrão, o processo de construção do Nokogiri examina / opt / local primeiro. Para forçá-lo a usar um diretório de instalação diferente, / usr / local, por exemplo, faça:

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
TsenYing
fonte
-1

Esta postagem do blog propõe instalar o libiconv manualmente.

Posteriormente, o nokogiri pode ser instalado com vários switches, informando onde encontrar o libiconv (consulte a publicação no blog).

Como nota lateral: Após instalar o nokogiri, consegui instalar o gollum (cuja instalação também falhou porque não foi possível encontrar o iconv). Agora ainda estou enfrentando problemas, porque quando inicio o gollum, o Python trava.

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

OBSERVAÇÃO O arquivo /lib/iconv/iconv.so ausente em 2.0.0-p247, presente na instalação das gemas 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'

Copie o arquivo

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

AGORA FUNCIONA!

$ pry
[1] pry(main)> require 'iconv'
=> true
Darren Weber
fonte
Nota: Estou trabalhando com rbenv, mas esse problema é específico da instalação da gem e deve ser corrigido no fluxo!
precisa saber é o seguinte
Esta resposta não tem nada a ver com a biblioteca C libiconv da qual a construção de nokogiri depende. a resposta deve realmente ser removida.
Lamont
-1

Eu tive que instalar o gcc primeiro antes de executar ./configure --prefix=/usr/local/Cellar/libiconv/1.13.1

Cody Barr
fonte