A instalação Json do Ruby Gem falha no Mavericks e no Xcode 5.1 - argumento desconhecido: '-multiply_definedsuppress'

105

Eu estava tentando executar gem install json e recebi o seguinte erro

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb 
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling generator.c
linking shared-object json/ext/generator.bundle
clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
make: *** [generator.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /opt/boxen/repo/.bundle/ruby/2.0.0/gems/json-1.8.0 for inspection.
Results logged to /opt/boxen/repo/.bundle/ruby/2.0.0/extensions/universal-darwin-13/2.0.0/json-1.8.0/gem_make.out

Estou a usar:

Os X: 10.9.2
Xcode: 5.1 Build versão 5B130a
Command Line Tools (CLT): 5.1.0.0.1.1393561416
Ruby: ruby ​​2.0.0p247 (2013-06-27 revisão 41674) [universal.x86_64-darwin13]
Ruby Gem: 2.2 .2
GCC: 4.2.1 Apple LLVM versão 5.1 (clang-503.0.38) (baseado em LLVM 3.4svn)

g8M
fonte
1
Fiz muitas coisas tentando resolver esse problema e não sei exatamente o que resolveu, mas instalei a nova versão do ruby, baixei a versão anterior do Command Line Tools (final de outubro) e executei o comando @Muncken's answer (ARCHFLAGS = -Wno-error = argumento de linha de comando não utilizado-erro rígido no futuro {comando original}). Isso resolveu meu problema. No meu caso específico, eu estava usando o boxen para instalar meu ambiente, então o comando final que usei foi ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Obrigado a todos que ajudaram.
g8M
O Mavericks 10.9.3 atualiza o Ruby para: ruby ​​2.0.0p451 (2014-02-24 revisão 45167) [universal.x86_64-darwin13] Isso parece resolver o problema.
Shahar Hadas
1
O problema é com a versão antiga do ruby, como diz @Sash. Tive de atualizar para 2.0.0p451 manualmente a partir de 2.0.0p2 .. usando rvm: rvm install ruby-2.0.0-p451. O rvm deve defini-lo como versão padrão, então você só precisa reinstalar suas joias
Adam Spence
Estou tendo este problema com rvm ruby ​​2.2.0p0 (2014-12-25 revisão 49005)
Sonny Parlin

Respostas:

145

Estou encontrando exatamente o mesmo problema depois de atualizar o Xcode para 5.1 e as notícias da Apple não são boas. Das notas de versão do Xcode 5.1 :

  • O compilador Apple LLVM no Xcode 5.1 trata as opções de linha de comando não reconhecidas como erros. Este problema foi visto ao construir extensões nativas Python e Ruby Gems, onde algumas opções de compilador inválidas são especificadas atualmente.

Projetos que usam opções do compilador inválidas precisarão ser alterados para remover essas opções. Para ajudar a facilitar essa transição, o compilador aceitará temporariamente uma opção de fazer o downgrade do erro para um aviso:

-Wno-error=unused-command-line-argument-hard-error-in-future

Para contornar esse problema, defina a variável de ambiente ARCHFLAGS para fazer o downgrade do erro para um aviso.

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName

Parece que todas as gemas que violam as opções do compilador devem ser atualizadas para usar opções válidas. É declarado explicitamente que: Esta opção [erro de rebaixamento para aviso] não será suportada no futuro .

A nota clang que estamos vendo ( será um erro grave (não pode ser rebaixado para um aviso) no futuro ) corresponde à alteração anunciada nas notas de lançamento.


Para responder especificamente à sua pergunta, use o seguinte para instalar o json gem:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install json

Observe, entretanto, que esta é apenas uma correção temporária.

Kasper Munck
fonte
1
Muito obrigado, você me ajudou muito. Desde a atualização para a versão 5.1 das ferramentas Xcode CLI, eu estava recebendo um monte de erros ao tentar agrupar um projeto Rails 4. Embora eu precisasse passar pelas ARCHFLAGSduas vezes: ao instalar gemas corrompidas específicas e ao executar o Bundler.
Que bom que pude ajudar Rafael. Passei a maior parte do meu dia na mesma bagunça.
Kasper Munck
Fiz muitas coisas tentando resolver esse problema e não sei exatamente o que resolveu, mas instalei a nova versão do ruby, baixei a versão anterior das ferramentas de linha de comando (final de outubro) e executei o comando nesta resposta. Isso resolveu meus problemas. No meu caso, eu estava usando caixas para instalar meu ambiente, então o comando final que usei foi ARCHFLAGS = -Wno-error = argumento de linha de comando não utilizado-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Obrigado a todos que ajudaram
g8M
2
Não consigo fazer essa solução funcionar para mim. Ainda falha com clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]alguma ideia?
rauberdaniel
1
Você pode tentar exportar explicitamente e export ARCHFLAGS="...", em seguida, executar o comando de compilação em uma nova linha, como gem install json(Estou compilando módulos Python sozinho). A propósito, não se esqueça de adicionar archflags previamente existentes à linha, ou então eles serão substituídos.
Michiel Kauw-A-Tjoe
107

Uma linha para consertar isso

curl https://gist.githubusercontent.com/Paulche/9713531/raw/1e57fbb440d36ca5607d1739cc6151f373b234b6/gistfile1.txt | sudo patch /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin13/rbconfig.rb
Paul Brit
fonte
Não funcionou. Executou o comando e teve falhas:patching file /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb Hunk #1 FAILED at 82. Hunk #2 FAILED at 125. 2 out of 2 hunks FAILED -- saving rejects to file /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/universal-darwin15/rbconfig.rb.rej
Elijah Murray
19

Para resolver o problema, você pode instalar a versão mais recente do ruby ​​conforme descrito por @Sash. Você pode usar os seguintes comandos para fazer isso. Caso já tenha instalado o rvm, não é necessário reinstalá-lo.

#Install rvm
\curl -sSL https://get.rvm.io | bash -s stable

#Install ruby version 2.0.0-p451
rvm install ruby-2.0.0-p451

#Print ruby version to verify that it was installed successfully
ruby -v

#Install json gem
sudo gem install json
Sbhklr
fonte
12

Problema já resolvido por Ruby:

https://bugs.ruby-lang.org/issues/9624

agora só precisamos esperar que a Apple atualize sua versão ruby ​​(2.0.0p247) para a versão posterior à mais recente (2.0.0p451) que ainda não foi lançada ... (ou brew / macport it)

Atualização (2014-05-15): Mavericks 10.9.3 atualiza ruby ​​para ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] E isso parece resolver o problema.

Shahar Hadas
fonte
4

@Muncken já forneceu uma resposta para instalar o gem um por um:

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName

Com base na resposta de Muncken, tentei que também funciona ao usar bundle install

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install
worldask
fonte
Você poderia dar uma descrição?
bjb568
como @Muncken disse, mas ele apenas forneceu a resposta gem install, eu tentei que bundle installtambém funciona
worldask
Sua resposta deve ser completa por conta própria, mesmo sem contexto de outras respostas.
bjb568
Sim. Muito melhor e completo.
bjb568
Este ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future pode ser usado em cada comando que falha com clang: error: desconhecido argumento: '-multiply_definedsuppress'. Na verdade, isso diz ao compilador do clang que esse erro deve ser tratado como um aviso
g8M
2

No meu caso, na verdade, tenho problema semelhante, mas não no ruby ​​do sistema, mas nos rubis instalados pelo rvm do OSX 10.8, e ele apresenta problemas após atualizar para o OSX 10.9.

Uma simples reinstalação funciona: rvm reinstall ruby-2.1.1

xbeta
fonte
Depois de tentar tudo sob o sol para corrigir esse problema, isso é o que fez para mim! Obrigado!
Trespassers W
1

No OSX 10.10, tive vários problemas ao executar rails new firstapp, como:

ERROR:  Error installing json:
ERROR: Failed to build gem native extension.
fatal error: 'ruby/config.h' file not found

Atualizei o rvm com esta configuração e todos os erros desapareceram !:

rvm get stable --auto-dotfiles

Você pode dizer pelo nome do aplicativo que comecei a mexer no Ruby on Rails, então o conselho acima pode ou não funcionar para você.


fonte
1

O one-liner de Paul Chechetin parece não funcionar mais (21/09/15). Contudo, esta resposta à postagem mencionada na resposta de Pete resolveu o problema para mim:

  • (a) Instale o XCode da Apple e (b) inicie-o e aceite os termos de licenciamento (eu tinha feito (a), mas não (b).)
  • sudo gem uninstall compass
  • sudo gem install compass
Marca
fonte
Eu atualizei o Xcode, mas nunca o lancei. Quando o iniciei, ele me pediu para aceitar algo e, em seguida, tive que "instalar componentes". Depois disso, tentei de gem install jsonnovo e funcionou!
Sarah Vessels
1

Nenhum desses funcionou para mim.

O que finalmente funcionou foi executar o comando com um sudo -

gem install byebug -v '9.0.6'

Alex Jose
fonte
-1

Usei uma solução simples ... instale por meio de fermentação

nome de instalação da cerveja

user3800976
fonte