Instalacja Json w Ruby Gem kończy się niepowodzeniem na Mavericks i Xcode 5.1 - nieznany argument: '-multiply_definedsuppress'


105

Próbowałem uruchomić gem install json i otrzymałem następujący błąd

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

Używam:

Os X: 10.9.2
Xcode: 5.1 Wersja kompilacji 5B130a
Narzędzia wiersza poleceń (CLT): 5.1.0.0.1.1393561416
Ruby: ruby ​​2.0.0p247 (2013-06-27 wersja 41674) [universal.x86_64-darwin13]
Ruby Gem: 2.2 .2
GCC: 4.2.1 Apple LLVM wersja 5.1 (clang-503.0.38) (na podstawie LLVM 3.4svn)


1
Zrobiłem wiele rzeczy próbując rozwiązać ten problem i nie wiem dokładnie, które rozwiązało, ale zainstalowałem nową wersję Ruby, pobrałem poprzednią wersję Narzędzi wiersza poleceń (koniec października) i wykonałem polecenie @Muncken's answer (ARCHFLAGS = -Wno-error = nieużywany-argument-wiersza-poleceń-twardy-błąd-w-przyszłości (oryginalne polecenie}). To rozwiązało mój problem. W moim konkretnym przypadku użyłem boxena do zainstalowania mojego środowiska, więc ostatnim poleceniem, którego użyłem, było ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Dziękuję wszystkim, którzy pomogli.
g8M

Mavericks 10.9.3 aktualizuje ruby ​​do: ruby ​​2.0.0p451 (wersja 45167 2014-02-24) [universal.x86_64-darwin13] Wydaje się, że rozwiązuje to problem.
Shahar Hadas

1
Problem dotyczy starej wersji ruby, jak mówi @Sash. Musiałem ręcznie zaktualizować do wersji 2.0.0p451 z wersji 2.0.0p2 .. używając rvm: rvm install ruby-2.0.0-p451. rvm powinien ustawić go jako wersję domyślną, a następnie wystarczy ponownie zainstalować swoje klejnoty
Adam Spence

Mam ten problem z rvm ruby ​​2.2.0p0 (2014-12-25 wersja 49005)
Sonny Parlin,

Odpowiedzi:


145

Napotykam dokładnie ten sam problem po aktualizacji Xcode do 5.1 i wiadomości od Apple nie są dobre. Z uwag do wydania Xcode 5.1 :

  • Kompilator Apple LLVM w Xcode 5.1 traktuje nierozpoznane opcje wiersza polecenia jako błędy. Ten problem wystąpił podczas budowania zarówno natywnych rozszerzeń języka Python, jak i Ruby Gems, gdzie obecnie określono niektóre nieprawidłowe opcje kompilatora.

Projekty używające nieprawidłowych opcji kompilatora będą musiały zostać zmienione, aby usunąć te opcje. Aby ułatwić to przejście, kompilator tymczasowo zaakceptuje opcję obniżenia poziomu błędu do ostrzeżenia:

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

Aby obejść ten problem, ustaw zmienną środowiskową ARCHFLAGS, aby obniżyć wersję błędu do ostrzeżenia.

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

Wydaje się, że wszystkie klejnoty naruszające opcje kompilatora muszą zostać zaktualizowane, aby używały prawidłowych opcji. Wyraźnie stwierdzono, że: Ta opcja [obniżanie błędu do ostrzeżenia] nie będzie obsługiwana w przyszłości .

Notatka ostrzegawcza, którą widzimy ( będzie to poważny błąd (nie może być obniżona do ostrzeżenia) w przyszłości ) odpowiada zmianie ogłoszonej w informacjach o wydaniu.


Aby konkretnie odpowiedzieć na swoje pytanie, zainstaluj json gem w następujący sposób:

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

Należy jednak pamiętać, że jest to tylko tymczasowa poprawka.


1
Dziękuję bardzo, bardzo mi pomogłeś. Od czasu aktualizacji do Xcode CLI tools 5.1 w wersji otrzymywałem mnóstwo błędów, kiedy próbowałem pakować projekt Rails 4. Chociaż musiałem przejść ARCHFLAGSdwa razy: podczas instalowania określonych uszkodzonych klejnotów i podczas uruchamiania Bundlera.

Cieszę się, że mogłem pomóc Rafaelowi. Większość dnia spędziłem w tym samym bałaganie.
Kasper Munck

Zrobiłem wiele rzeczy, próbując rozwiązać ten problem i nie wiem dokładnie, które rozwiązało, ale zainstalowałem nową wersję Ruby, pobrałem poprzednią wersję narzędzi wiersza polecenia (koniec października) i wykonałem polecenie na tej odpowiedzi. To rozwiązało moje problemy. W moim przypadku używałem skrzynek do zainstalowania mojego środowiska, więc ostatnim poleceniem, którego użyłem, było ARCHFLAGS = -Wno-error = unused-command-line-argument-hard-error-in-future / opt / boxen / repo / script / boxen --no-fde. Dziękuję wszystkim, którzy pomogli
g8M

2
Nie mogę sprawić, by to rozwiązanie działało dla mnie. Nadal nie ma clang: error: unknown argument: '-multiply_definedsuppress' [-Wunused-command-line-argument-hard-error-in-future]żadnych pomysłów?
rauberdaniel

1
Możesz spróbować wyeksportować jawnie export ARCHFLAGS="...", a następnie uruchomić polecenie kompilacji w nowej linii, na przykład gem install json(sam kompiluję moduły Pythona). Nawiasem mówiąc, nie zapomnij dodać istniejących wcześniej archflagów do linii, w przeciwnym razie zostaną one nadpisane.
Michiel Kauw-A-Tjoe

107

Jedna linijka, aby to naprawić

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

Nie udało się. Wykonałem polecenie i miałem awarie: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

Aby rozwiązać ten problem, możesz zainstalować najnowszą wersję ruby, zgodnie z opisem @Sash. W tym celu możesz użyć następujących poleceń. Jeśli już zainstalowałeś rvm, nie musisz go ponownie instalować.

#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

Problem już rozwiązany przez Rubiego:

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

teraz musimy tylko poczekać, aż Apple zaktualizuje swoją wersję Ruby (2.0.0p247) do tej po najnowszej (2.0.0p451), która jeszcze nie wyszła ... (lub zaparz / macport to)

Aktualizacja (2014-05-15): Mavericks 10.9.3 aktualizuje ruby ​​do ruby 2.0.0p451 (2014-02-24 revision 45167) [universal.x86_64-darwin13] I wydaje się, że rozwiązuje problem.


4

@Muncken już odpowiedział, aby zainstalować gem jeden po drugim:

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

Bazując na odpowiedzi Munckena, próbowałem, że działa również podczas używania bundle install

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

Czy mógłbyś podać opis?
bjb568

jak @Muncken powiedział, ale właśnie udzielił odpowiedzi gem install, próbowałem to bundle installrównież działa
worldask

Twoja odpowiedź powinna być sama w sobie kompletna, nawet bez kontekstu innych odpowiedzi.
bjb568

Tak. Dużo lepsze i kompletne.
bjb568

Argument ARCHFLAGS = -Wno-error = unused-argument-argument-wiersza-poleceń-hard-error-in-future może być użyty w każdym poleceniu, które kończy się niepowodzeniem z clang: error: unknown argument: '-multiply_definedsuppress'. Właściwie to mówi kompilatorowi clang, że ten błąd powinien być traktowany jako ostrzeżenie
g8M

2

W moim przypadku faktycznie mam podobny problem, ale nie w systemie Ruby, ale na Rubinach zainstalowanych przez rvm z OSX 10.8 i ma problemy po aktualizacji do OSX 10.9.

Prosta ponowna instalacja działa: rvm reinstall ruby-2.1.1


Po wypróbowaniu wszystkiego pod słońcem, aby rozwiązać ten problem, właśnie to zrobiło dla mnie! Dziękuję Ci!
Trespassers W

1

W systemie OSX 10.10 miałem kilka problemów podczas uruchamiania, rails new firstapptakich jak:

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

Zaktualizowałem rvm tą konfiguracją i wszystkie błędy zniknęły !:

rvm get stable --auto-dotfiles

Po nazwie aplikacji możesz stwierdzić, że właśnie zacząłem bawić się Ruby on Rails, więc powyższe porady mogą, ale nie muszą, działać dla Ciebie.


1

Jedna linijka Paula Chechetina wydaje się już nie działać (21.09.15). Jednak ta odpowiedź na post wspomniany w odpowiedzi Pete'a rozwiązała problem za mnie:

  • (a) Zainstaluj Apple XCode, a następnie (b) uruchom go i zaakceptuj warunki licencji (zrobiłem (a), ale nie (b).)
  • sudo gem uninstall compass
  • sudo gem install compass

Zaktualizowałem Xcode, ale nigdy go nie uruchomiłem. Kiedy go uruchomiłem, poprosił mnie o akceptację, a następnie musiał „zainstalować komponenty”. Potem spróbowałem gem install jsonponownie i zadziałało!
Sarah Vessels

1

Żaden z nich nie działał dla mnie.

To, co w końcu zadziałało, to uruchomienie polecenia z sudo -

gem install byebug -v '9.0.6'


-1

Użyłem prostego rozwiązania ... zainstaluj przez napar

napisz nazwę instalacji

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.