Ruby Gem-Installation Json schlägt auf Mavericks und Xcode 5.1 fehl - unbekanntes Argument: '-multiply_definedsuppress'

105

Ich habe versucht, gem install json auszuführen und habe den folgenden Fehler erhalten

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

Ich benutze:

Os X: 10.9.2
Xcode: 5.1 Build-Version 5B130a
Befehlszeilentools (CLT): 5.1.0.0.1.1393561416
Ruby: Ruby 2.0.0p247 (27.06.2013, Revision 41674) [universal.x86_64-darwin13]
Ruby Gem: 2.2 .2
GCC: 4.2.1 Apple LLVM Version 5.1 (clang-503.0.38) (basierend auf LLVM 3.4svn)

g8M
quelle
1
Ich habe viele Dinge getan, um dieses Problem zu lösen, und ich weiß nicht genau, welche gelöst wurden, aber ich habe die neue Ruby-Version installiert, die vorherige Version der Befehlszeilentools (Ende Oktober) heruntergeladen und die Antwort des Befehls @Muncken (ARCHFLAGS =) ausgeführt -Wno-error = unbenutzter Befehlszeilenargument-Hard-Error-in-Future {ursprünglicher Befehl}). Das hat mein Problem gelöst. In meinem speziellen Fall habe ich boxen verwendet, um meine Umgebung zu installieren. Der letzte Befehl, den ich verwendet habe, war ARCHFLAGS = -Wno-error = nicht verwendetes Befehlszeilenargument-harter Fehler in der Zukunft / opt / boxen / repo / script / boxen --no-fde. Vielen Dank an alle, die geholfen haben.
G8M
Mavericks 10.9.3 aktualisiert Ruby auf: Ruby 2.0.0p451 (2014-02-24 Revision 45167) [universal.x86_64-darwin13] Dies scheint das Problem zu beheben.
Shahar Hadas
1
Das Problem ist mit der alten Version von Ruby, wie @Sash sagt. Ich musste manuell von 2.0.0p2 auf 2.0.0p451 aktualisieren. Mit rvm: rvm installiere ruby-2.0.0-p451. rvm sollte es als Standardversion festlegen, dann müssen Sie nur Ihre Edelsteine ​​neu installieren
Adam Spence
Ich habe dieses Problem mit RVM Ruby 2.2.0p0 (2014-12-25 Revision 49005)
Sonny Parlin

Antworten:

145

Ich habe genau das gleiche Problem, nachdem ich Xcode auf 5.1 aktualisiert habe und die Nachrichten von Apple sind nicht gut. Von Xcode 5.1 Versionshinweise :

  • Der Apple LLVM-Compiler in Xcode 5.1 behandelt nicht erkannte Befehlszeilenoptionen als Fehler. Dieses Problem trat auf, wenn sowohl native Python-Erweiterungen als auch Ruby Gems erstellt wurden, in denen derzeit einige ungültige Compileroptionen angegeben sind.

Projekte, die ungültige Compileroptionen verwenden, müssen geändert werden, um diese Optionen zu entfernen. Um diesen Übergang zu vereinfachen, akzeptiert der Compiler vorübergehend eine Option zum Herabstufen des Fehlers auf eine Warnung:

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

Um dieses Problem zu umgehen, setzen Sie die Umgebungsvariable ARCHFLAGS so, dass der Fehler auf eine Warnung herabgestuft wird.

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

Es scheint, dass alle Edelsteine, die gegen die Compileroptionen verstoßen, aktualisiert werden müssen, um gültige Optionen zu verwenden. Es wird ausdrücklich darauf hingewiesen, dass: Diese Option [Fehler auf Warnung herabstufen] in Zukunft nicht mehr unterstützt wird .

Die Clang-Note, die wir sehen ( dies wird in Zukunft ein schwerer Fehler sein (kann nicht auf eine Warnung herabgestuft werden) ), entspricht der in den Release-Notes angekündigten Änderung.


Um Ihre Frage speziell zu beantworten, verwenden Sie Folgendes, um das json gem zu installieren:

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

Beachten Sie jedoch, dass dies nur eine vorübergehende Korrektur ist.

Kasper Munck
quelle
1
Vielen Dank, Sie haben mir sehr geholfen. Seit dem Update auf die Version 5.1 der Xcode CLI-Tools sind beim Versuch, ein Rails 4-Projekt zu bündeln, eine Unmenge von Fehlern aufgetreten. Allerdings musste ich das ARCHFLAGSzweimal bestehen: bei der Installation bestimmter beschädigter Edelsteine ​​und beim Ausführen von Bundler.
Ich bin froh, dass ich Rafael helfen konnte. Ich habe den größten Teil meines Tages im selben Chaos verbracht.
Kasper Munck
Ich habe viele Dinge getan, um dieses Problem zu lösen, und ich weiß nicht genau, welche gelöst wurden, aber ich habe die neue Ruby-Version installiert, die vorherige Version der Befehlszeilentools (Ende Oktober) heruntergeladen und den Befehl für diese Antwort ausgeführt. Dies löste meine Probleme. In meinem Fall habe ich Boxen verwendet, um meine Umgebung zu installieren. Der letzte Befehl, den ich verwendet habe, war ARCHFLAGS = -Wno-error = nicht verwendetes Befehlszeilenargument-harter Fehler in der Zukunft / opt / boxen / repo / script / boxen --no-fde. Vielen Dank an alle, die geholfen haben
g8M
2
Ich kann diese Lösung nicht für mich zum Laufen bringen. Scheitert immer noch mit clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]irgendwelchen Ideen?
Rauberdaniel
1
Sie können versuchen, explizit zu exportieren export ARCHFLAGS="..."und dann Ihren Kompilierungsbefehl in einer neuen Zeile auszuführen, z. B. gem install json(Ich kompiliere Python-Module selbst). Vergessen Sie übrigens nicht, der Linie bereits vorhandene Archflags hinzuzufügen, sonst werden sie überschrieben.
Michiel Kauw-A-Tjoe
107

Einzeiler, um das zu beheben

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
quelle
Hat nicht funktioniert. Lief den Befehl und hatte Fehler: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

Um das Problem zu beheben, können Sie die neueste Version von Ruby installieren, wie von @Sash beschrieben. Sie können dazu die folgenden Befehle verwenden. Falls Sie rvm bereits installiert haben, müssen Sie es nicht neu installieren.

#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
quelle
12

Von Ruby bereits behobenes Problem:

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

Jetzt müssen wir nur noch darauf warten, dass Apple seine Ruby-Version (2.0.0p247) auf die nach der neuesten Version (2.0.0p451) aktualisiert, die noch nicht herausgekommen ist ... (oder brauen / macportieren)

Update (15.05.2014): Mavericks 10.9.3 aktualisiert Ruby auf ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] Und dies scheint das Problem zu beheben .

Shahar Hadas
quelle
4

@Muncken hat bereits eine Antwort gegeben, um gem einzeln zu installieren:

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

Basierend auf Munckens Antwort habe ich versucht, dass es auch bei der Verwendung funktioniert bundle install

ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle install
Weltaufgabe
quelle
Könnten Sie eine Beschreibung geben?
bjb568
wie @Muncken sagte, aber er gab nur die Antwort gem install, ich habe versucht, dass das bundle installauch funktioniert
worldask
Ihre Antwort sollte von sich aus vollständig sein, auch ohne Kontext anderer Antworten.
bjb568
Jep. Viel besser und vollständiger.
bjb568
Dieses ARCHFLAGS = -Wno-error = nicht verwendetes Befehlszeilenargument-Hard-Error-in-Future kann in jedem Befehl verwendet werden, der mit clang fehlschlägt: error: unbekanntes Argument: '-multiply_definedsuppress'. Tatsächlich sagt dies dem Clang-Compiler, dass dieser Fehler als Warnung behandelt werden sollte
g8M
2

In meinem Fall habe ich tatsächlich ein ähnliches Problem, jedoch nicht auf dem System-Ruby, sondern auf Rubinen, die von rvm unter OSX 10.8 installiert wurden, und es treten Probleme nach dem Upgrade auf OSX 10.9 auf.

Eine einfache Neuinstallation funktioniert: rvm reinstall ruby-2.1.1

xbeta
quelle
Nachdem ich alles unter der Sonne versucht habe, um dieses Problem zu beheben, hat es das für mich getan! Danke dir!
Eindringlinge W
1

Unter OSX 10.10 hatte ich beim Ausführen verschiedene Probleme, rails new firstappz.

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

Ich habe rvm mit dieser Konfiguration aktualisiert und alle Fehler sind weg!:

rvm get stable --auto-dotfiles

Sie können dem Namen der App entnehmen, dass ich gerade angefangen habe, mit Ruby on Rails zu spielen, sodass die oben genannten Ratschläge möglicherweise für Sie funktionieren oder nicht.


quelle
1

Paul Chechetins Einzeiler scheint nicht mehr zu funktionieren (21.9.15). Jedoch, Antwort auf den in Petes Antwort erwähnten Beitrag löste jedoch das Problem für mich:

  • (a) Installieren Sie den XCode von Apple, starten Sie ihn dann (b) und akzeptieren Sie die Lizenzbedingungen (ich hatte (a), aber nicht (b) getan.)
  • sudo gem uninstall compass
  • sudo gem install compass
Kennzeichen
quelle
Ich hatte Xcode aktualisiert, aber nie gestartet. Als ich es startete, forderte es mich auf, etwas zu akzeptieren, dann musste es "Komponenten installieren". Danach habe ich es noch gem install jsoneinmal versucht und es hat funktioniert!
Sarah Vessels
1

Nichts davon hat bei mir funktioniert.

Was schließlich funktioniert hat, ist das Ausführen des Befehls mit einem Sudo -

gem install byebug -v '9.0.6'

Alex Jose
quelle
-1

Ich habe eine einfache Lösung verwendet ... durch Brauen installieren

Name der Brauinstallation

user3800976
quelle