L'installation de Ruby Gem échoue sur Mavericks et Xcode 5.1 - argument inconnu: '-multiply_definedsuppress'


105

J'essayais d'exécuter gem install json et j'ai eu l'erreur suivante

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

J'utilise:

OS X: 10.9.2
Xcode: 5.1 Build version 5B130a
Outils de ligne de commande (CLT): 5.1.0.0.1.1393561416
Ruby: ruby ​​2.0.0p247 (2013-06-27 révision 41674) [universal.x86_64-darwin13]
Ruby Gem: 2.2 .2
GCC: 4.2.1 Apple LLVM version 5.1 (clang-503.0.38) (basé sur LLVM 3.4svn)


1
J'ai fait beaucoup de choses pour essayer de résoudre ce problème et je ne sais pas exactement ce qui a résolu mais j'ai installé la nouvelle version de ruby, téléchargé la version précédente des outils de ligne de commande (fin octobre) et exécuté la réponse de la commande @Muncken (ARCHFLAGS = -Wno-error = argument-de-ligne-de-commande-inutilisé-erreur-dure-dans-le-futur {commande d'origine}). Cela a résolu mon problème. Dans mon cas spécifique, j'utilisais boxen pour installer mon environnement, donc la commande finale que j'ai utilisée était ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Merci à tous ceux qui ont aidé.
g8M

Mavericks 10.9.3 met à jour ruby ​​vers: ruby ​​2.0.0p451 (2014-02-24 révision 45167) [universal.x86_64-darwin13] Cela semble résoudre le problème.
Shahar Hadas

1
Le problème est avec l'ancienne version de ruby ​​comme le dit @Sash. J'ai dû mettre à jour manuellement vers 2.0.0p451 à partir de 2.0.0p2 .. en utilisant rvm: rvm install ruby-2.0.0-p451. rvm devrait le définir comme version par défaut, il vous suffit de réinstaller vos gemmes
Adam Spence

J'ai ce problème avec RVM Ruby 2.2.0p0 (2014-12-25 révision 49005)
Sonny Parlin

Réponses:


145

Je rencontre exactement le même problème après la mise à jour de Xcode vers la version 5.1 et les nouvelles d'Apple ne sont pas bonnes. À partir des notes de version de Xcode 5.1 :

  • Le compilateur Apple LLVM dans Xcode 5.1 traite les options de ligne de commande non reconnues comme des erreurs. Ce problème a été rencontré lors de la construction d'extensions natives Python et de Ruby Gems, où certaines options de compilateur non valides sont actuellement spécifiées.

Les projets utilisant des options de compilateur non valides devront être modifiés pour supprimer ces options. Pour faciliter cette transition, le compilateur acceptera temporairement une option pour rétrograder l'erreur en avertissement:

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

Pour contourner ce problème, définissez la variable d'environnement ARCHFLAGS pour rétrograder l'erreur en avertissement.

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

Il semble que toutes les gemmes violant les options du compilateur doivent être mises à jour pour utiliser des options valides. Il est explicitement indiqué que: Cette option [erreur de rétrogradation en avertissement] ne sera plus prise en charge à l'avenir .

La note sonore que nous voyons ( ce sera une erreur grave (ne peut pas être rétrogradée en avertissement) à l'avenir ) correspond au changement annoncé dans les notes de publication.


Pour répondre spécifiquement à votre question, utilisez ce qui suit pour installer le gem json:

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

Notez, cependant, qu'il ne s'agit que d'un correctif temporaire.


1
Merci beaucoup, vous m'avez beaucoup aidé. Depuis la mise à jour de la version 5.1 des outils Xcode CLI, j'obtenais un tas d'erreurs en essayant de regrouper un projet Rails 4. Même si j'avais besoin de passer ARCHFLAGSdeux fois: lors de l'installation de gemmes corrompues spécifiques et lors de l'exécution de Bundler.

Heureux d'avoir pu aider Rafael. J'ai passé la majeure partie de ma journée dans le même désordre.
Kasper Munck

J'ai fait beaucoup de choses pour essayer de résoudre ce problème et je ne sais pas exactement qui a résolu mais j'ai installé la nouvelle version de ruby, téléchargé la version précédente des outils de ligne de commande (fin octobre) et exécuté la commande sur cette réponse. Cela a résolu mes problèmes. Dans mon cas, j'utilisais des boîtes pour installer mon environnement, donc la commande finale que j'ai utilisée était ARCHFLAGS = -Wno-error = unknown-command-line-argument-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Merci à tous ceux qui ont aidé
g8M

2
Je ne peux pas faire fonctionner cette solution pour moi. Échoue toujours avec des clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]idées?
rauberdaniel

1
Vous pouvez essayer d'exporter explicitement export ARCHFLAGS="...", puis d'exécuter votre commande de compilation dans une nouvelle ligne, telle que gem install json(je compile moi-même des modules Python). Au fait, n'oubliez pas d'ajouter des archflags déjà existants à la ligne, sinon ils seront écrasés.
Michiel Kauw-A-Tjoe

107

Une seule ligne pour résoudre ce problème

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

Ça n'a pas marché. A exécuté la commande et a eu des échecs: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

Pour résoudre le problème, vous pouvez installer la version la plus récente de ruby ​​comme décrit par @Sash. Vous pouvez utiliser les commandes suivantes pour ce faire. Si vous avez déjà installé rvm, vous n'avez pas besoin de le réinstaller.

#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

12

Problème déjà résolu par Ruby:

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

il ne reste plus qu'à attendre qu'Apple mette à jour sa version ruby ​​(2.0.0p247) vers celle qui suit la dernière (2.0.0p451) qui n'est pas encore sortie ... (ou brasse / macport)

Mise à jour (2014-05-15): Mavericks 10.9.3 met à jour ruby ​​vers ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] Et cela semble résoudre le problème.


4

@Muncken a déjà fourni une réponse pour installer un gem un par un:

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

Basé sur la réponse de Muncken, j'ai essayé que cela fonctionne également lors de l'utilisation bundle install

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

Pouvez-vous donner une description?
bjb568

comme @Muncken l'a dit, mais il vient de fournir la réponse gem install, j'ai essayé que cela bundle installfonctionne aussi
worldask

Votre réponse doit être complète par elle-même, même sans contexte d'autres réponses.
bjb568

Ouaip. Beaucoup mieux et complet.
bjb568

Cet ARCHFLAGS = -Wno-error = paramètre-de-ligne-de-commande-non-utilisé-erreur-dure-à-l'avenir peut être utilisé dans chaque commande qui échoue avec clang: erreur: argument inconnu: '-multiply_definedsuppress'. En fait, cela indique au compilateur clang que cette erreur doit être traitée comme un avertissement
g8M

2

Dans mon cas, j'ai en fait un problème similaire, mais pas sur le système ruby, mais sur les rubis installés par rvm à partir d'OSX 10.8, et il a des problèmes après la mise à niveau vers OSX 10.9.

Une simple réinstallation fonctionne: rvm reinstall ruby-2.1.1


Après avoir tout essayé sous le soleil pour résoudre ce problème, c'est ce qui m'a aidé! Je vous remercie!
Trespassers W

1

Sur OSX 10.10, j'ai eu plusieurs problèmes lors de l'exécution, rails new firstapptels que:

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

J'ai mis à jour rvm avec cette configuration et toutes les erreurs ont disparu!:

rvm get stable --auto-dotfiles

Vous pouvez dire d'après le nom de l'application que je viens de commencer à jouer avec Ruby on Rails, donc les conseils ci-dessus peuvent ou non fonctionner pour vous.


1

Le one-liner de Paul Chechetin ne semble plus fonctionner (21/09/15). Cependant, cette réponse au message mentionné dans la réponse de Pete a résolu le problème pour moi:

  • (a) Installez le XCode d'Apple, puis (b) lancez-le et acceptez les termes de la licence (j'avais fait (a), mais pas (b).)
  • sudo gem uninstall compass
  • sudo gem install compass

J'avais mis à jour Xcode mais je ne l'avais jamais lancé. Quand je l'ai lancé, cela m'a incité à accepter quelque chose, puis il a fallu «installer des composants». Après cela, j'ai réessayé mon gem install jsonet cela a fonctionné!
Sarah Vessels

1

Aucun de ceux-ci n'a fonctionné pour moi.

Ce qui a finalement fonctionné, c'est d'exécuter la commande avec un sudo -

gem installer byebug -v '9.0.6'


-1

J'ai utilisé une solution simple ... installer par infusion

nom d'installation de brew

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.