Nokogiri gem não consegue instalar no OS X Mavericks

1

A instalação falha mostrando:

checking for iconv_open() in iconv.h... no
checking for iconv_open() in -liconv... no
checking for iconv_open() in -liconv... no
checking for libiconv_open() in iconv.h... no
checking for libiconv_open() in -liconv... no
checking for libiconv_open() in -liconv... no
libiconv is missing.

No entanto, olhando mkmf.log do nokogiri, os seguintes erros são mostrados:

ld: warning: ignoring file /usr/local/Cellar/libxslt/1.1.28/lib/libxslt.dylib, **file was built for x86_64 which is not the architecture being linked (i386)**: /usr/local/Cellar/libxslt/1.1.28/lib/libxslt.dylib

ld: warning: ignoring file /usr/local/Cellar/libxml2/2.9.1/lib/libxml2.dylib, **file was built for x86_64 which is not the architecture being linked (i386)**: /usr/local/Cellar/libxml2/2.9.1/lib/libxml2.dylib

ld: warning: ignoring file /usr/local/Cellar/libiconv/1.14/lib/libiconv.dylib, **file was built for x86_64 which is not the architecture being linked (i386)**: /usr/local/Cellar/libiconv/1.14/lib/libiconv.dylib

Eu tenho o xcode e as ferramentas de comando instaladas. Meu ~ / .bash_profile tem compilação de 64 bits forçada por: export ARCHFLAGS = "- arch x86_64"

Eu tenho libxml2, libxslt e libiconv instalados via Homebrew, e cada um está vinculado. Eu tentei instalar todos estes sem o ARCHFLAG em .bash_profile.

Eu também preparei o apple-gcc42 e o vinculei, de acordo com o que encontrei.

Eu tentei instalar o nokogiri passando caminhos para libxml2, libxslt e libiconv em / usr / local / Cellar /, mas a instalação ainda falha, com os mesmos erros acima.

Eu perdi pelo menos um dia nisso - apenas tentando obter uma gema Ruby instalada. Eu realmente gostaria de voltar ao desenvolvimento.

Alguém pode ajudar por favor?

user3591456
fonte
Qual rubi você está usando? OS X padrão ou um ruby ​​gerenciado pelo RVM? Com um 2.1.1 gerenciado pelo RVM, não tenho nenhum problema em fazer o 'gem install nokogiri'. Estou usando o XCode 5.1.1. Ele constrói e instala sua própria libxml2 e sua instalação nokogiri-1.6.3.1.
Ian C.

Respostas:

1

Você não pode presumir que a versão do Ruby embutida no OS X é compatível com as gemas que você deseja usar. Não tente remover a versão do ruby ​​fornecida com o OS X nem atualizá-lo ou atualizá-lo, a menos que seja com a Atualização de Loja / Atualização de Software / atualização de software. A maioria dos rubiers lhe dirá que você nem se incomodou em usar o ruby ​​que vem com o OS X. Mas você pode instalar múltiplas versões do Ruby, e você definitivamente precisará de um gerenciador de versões Ruby se você pretende usar muitas gemas.

Ruby já foi bastante fácil de usar, mas agora, o número de versões que necessariamente precisam ser suportadas é legion, e desenvolvedores de gemas algumas vezes forçam você a instalar uma nova versão do Ruby em alguma outra versão quando você já tem uma instalação Ruby perfeitamente boa. ! Grr. Ruby está realmente começando a se irritar, porque enquanto a informação de apoio pode estar lá fora, ela está parecendo mais e mais como um carretel de pesca que tem birdnested. IMO, rubi está quebrado, alguém vai ter que puxá-lo para fora e colocá-lo perfeitamente para que ele seja consertado, e eu não estou à altura disso. Eu não sou o cara. Eu não.

Apesar do entusiasmo dos brewinistas, o gerenciador de pacotes homebrew tem uma preocupação crescente com uma solução imatura de gerenciamento de pacotes. Eu uso o MacPorts para gerenciar ... todas as minhas instalações, mas também as várias versões das instalações do ruby ​​que são necessárias para usar as gemas que eu quero. MacPorts requer uma versão apropriada do xcode; xcode_5.1.1.dmg é a versão mais recente do Mavericks. O rvm usa MacPorts por padrão, se estiver instalado.

Parece de seus registros fornecidos que você está faltando coisas. Isso é o que é bom sobre MacPorts (e qualquer gerenciador de pacotes maduro); Ele cuida das dependências para você se elas não estiverem instaladas.

Instalar MacPorts

 curl -Ok https://distfiles.macports.org/MacPorts/MacPorts-2.2.1.tar.bz2

 tar xf MacPorts-2.2.1.tar.bz2

 cd MacPorts-2.2.1

 ./configure

 make

 sudo make install

 cd ..

 rm -rf Macports-*

 sudo /opt/local/bin/port -v selfupdate

adicione MacPorts ao seu $ PATH:

 export PATH=/opt/local/bin:/opt/local/sbin:$PATH

dê uma olhada no que MacPorts tem para o ruby

 port search ruby |less

e / ou apenas instalar nokogiri

 sudo port -vsk install ruby19 libxml2 libxslt 

 sudo gem install nokogiri

 port -vfp clean ruby19 libxml2 libxslt

se houver algum problema tente

 sudo port upgrade outdated

O MacPorts não afetará a versão do OS X de nada, nem o homebrew (exceto para torná-lo supérfluo) e mantém tudo que ele instala em / opt tornando a desinstalação fácil (mas isso não tem nada a ver com onde o ruby ​​mantém suas gemas, ~ / .gem ). Mas você deve realmente conhecer e amar MacPorts, é seu amigo.

desinstalar completamente o MacPorts

 sudo port -dfp uninstall --follow-dependencies installed

 sudo port -dfp uninstall all

 sudo rm -rf /opt/local  

 sudo rm -rf /Library/Tcl/macports*
chillin
fonte
Obrigado, eu tentei isso e ainda obter erros semelhantes relacionados ao i386 / x64 (não posso formatar aqui): ld: aviso: ignorando o arquivo /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.1 /ports/x86_64-apple-darwin13.1.0/libxslt/1.1.26/lib/libxslt.dylib, o arquivo foi criado para x86_64, que não é a arquitetura que está sendo vinculada (i386): /Library/Ruby/Gems/2.0.0/ gems / noko 85 ld: aviso: ignorando o arquivo /Library/Ruby/Gems/2.0.0/gems/nokogiri-1.6.1/ports/x86_64-apple-darwin13.1.0/libxml2/2.8.0/lib/libxml2.dylib , o arquivo foi criado para x86_64, que não é a arquitetura que está sendo vinculada (i386): /Library/Ruby/Gems/2.0.0/gems/nokog
user3591456
Você não disse qual sistema está usando ... talvez seja tão simples quanto forçar o sistema a usar o kernel de 64 bits (se você estiver no 10.6, os sistemas subsequentes já devem estar usando um kernel de 64 bits). Para garantir o modo de 64 bits, mantenha pressionadas as teclas '6' e '4' quando o Mac inicializar; ou abra o Terminal e insira: nvram boot-args="arch=x86_64" Você redefine para o modo de 32 bits da seguinte maneira:sudo nvram boot-args=""
chillin