„Gem install therubyracer -v '0.10.2'” na osx mavericks nie instaluje się

91

Próbuję zainstalować therubyracer na mavericks za pomocą "gem install therubyracer -v '0.10.2'", ale otrzymuję następujący błąd:

/Users/dennischen/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for main() in -lobjc... yes
creating Makefile

make
compiling rr.cpp
clang: warning: argument unused during compilation: '-rdynamic'
rr.cpp:48:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
1 warning generated.
compiling v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_array.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_callbacks.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_context.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_date.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_debug.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_exception.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_exception.cpp:10:16: warning: unused variable 'stack' [-Wunused-variable]
  static void* stack[20];
               ^
1 warning generated.
compiling v8_external.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_external.cpp:10:9: warning: unused variable 'references' [-Wunused-variable]
  VALUE references;
        ^
1 warning generated.
compiling v8_function.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_handle.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_locker.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_locker.cpp:45:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
v8_locker.cpp:85:5: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
2 warnings generated.
compiling v8_message.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_object.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_object.cpp:77:19: warning: unused variable 'proto' [-Wunused-variable]
    Handle<Value> proto(rr_rb2v8(prototype));
                  ^
1 warning generated.
compiling v8_script.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_string.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_template.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_try_catch.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_v8.cpp
clang: warning: argument unused during compilation: '-rdynamic'
compiling v8_value.cpp
clang: warning: argument unused during compilation: '-rdynamic'
v8_value.cpp:100:9: warning: unused function 'ToInt32' [-Wunused-function]
  VALUE ToInt32(VALUE self) {
        ^
1 warning generated.
compiling v8_weakref.cpp
clang: warning: argument unused during compilation: '-rdynamic'
linking shared-object v8.bundle
clang: error: no such file or directory: '/Users/dennischen/.rvm/gems/ruby-1.9.3-p194@panini/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'
make: *** [v8.bundle] Error 1

czy ktoś może mi pomóc dowiedzieć się, jak uruchomić ten klejnot? Mam zainstalowane narzędzia wiersza poleceń.

user2711889
źródło
Czy masz homebrew? Spróbuj zainstalować wersję 8, używając brew install v8przed instalacją gem
Ivan Shamatov
Uważam, że instalacja zaparzania v8 to osobny problem. Zobacz stackoverflow.com/questions/11598655/therubyracer-install-error, aby uzyskać szczegółowe informacje na temat wersji 8 z zaparzeniem.
Ash Blue

Odpowiedzi:

243

Jeśli zdecydujesz się użyć nowszej therubyracerwersji klejnotów, nie będziesz już mieć tego problemu

Inaczej:

brew tap homebrew/dupes # Thanks Tom
brew install apple-gcc42

export CC=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2
export CXX=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2
export CPP=/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2

brew uninstall v8

gem uninstall libv8

gem install therubyracer -v '0.10.2' # specify version
Julian Popov
źródło
11
To podejście wydaje się lepsze niż modyfikowanie linków symbolicznych
Nilesh
3
brew tap homebrew/dupesnaprawia „Błąd: brak dostępnej formuły dla apple-gcc42”
TomFuertes,
1
To WRESZCIE rozwiązało problem - dzięki! Wypróbowałem poniższe rozwiązanie dowiązania symbolicznego M. Scotta Forda i wydawało się, że działa, ale wyświetlałem błąd, gdy faktycznie próbowałem cokolwiek zrobić (rake, rails, itp.).
Kyle Fox
2
Twoja aktualizacja do therubyracer 0.12.0 naprawiła ten problem.
jackocnr
6
Niestety żadne z tych rozwiązań nie działa u mnie na OSX 10.9, ruby ​​2.1.0 i therubyracer 0.12.1.
turboladen
16

Więc w końcu udało mi się to po kilku zmaganiach ... dzięki Simonowi i Alvaro.

Mam jednak jedną rzecz do dodania, użycie flagi --with-system-v8 nie działa dla mnie ... Więc usunąłem swój system v8 z

brew uninstall v8

I bieg

gem install libv8

Jeśli już uruchomiłeś gem install libv8system z flagą v8 systemu, pamiętaj, aby odinstalować tę wersję gem (zrób to uruchamiając gem uninstall libv8). Ważną rzeczą jest to, że nie powinieneś używać tego dostarczonego przez brew, wydaje się, że nie działa w Mavericks (jest dobrze zainstalowany, a bundler zgłosi, że pakiet jest kompletny, ale twoja aplikacja zawiedzie, gdy spróbuje użyć v8 ).

Podsumowując odpowiedź, wykonałem następujące czynności:

brew install apple-gcc42
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

brew uninstall v8
gem install libv8
gem install therubyracer
damianmr
źródło
2
To zadziałało dla mnie. Ale podłączyłem symbolicznie gcc do / usr / local / bin i zrestartowałem terminal, aby móc go usunąć po zainstalowaniu libv8.
Jamon Holmgren
2
Symlinkowanie plików binarnych homebrew z tą konkretną wersją, do / usr / bin, jest naprawdę złym pomysłem. Następny, brew updatektóry nadejdzie i obróci te ścieżki, pozostawi cię w zepsutym stanie.
mrm
10

Miałem ten sam problem, to działa u mnie:

therubyracer (0.10.2) & libv8 (3.3.10.4)

Po pierwsze:

  • brew install apple-gcc42
  • trzeba połączyć wszystkie pliki binarne z kompilatorów ( gcc, cpp, g++) do/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Następnie możesz spróbować tego:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'lub bundle installdo katalogu projektu railsów.
Alvaro
źródło
apple-gcc42: This formula either does not compile or function as expected on macOS Mój macOS to 10.12.6
Wylliam Judd
7

Po prostu miałem ten sam problem i jednym rozwiązaniem jest obecnie użycie apple-gcc42 zamiast clang do kompilacji obu klejnotów:

brew install apple-gcc42

Następnie możesz wybrać pomiędzy wykonaniem kilku dowiązań symbolicznych w / usr / bin dla plików binarnych {gcc, g ++, c ++}:

sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -s /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp

W rzeczywistości g ++ powinno wystarczyć.

Lub ... możesz wyeksportować zmienne środowiskowe CC / CXX / CPP ze ścieżkami odpowiadającymi plikom binarnym utworzonym przez homebrew. To z pewnością czystsze obejście.

Trzecim rozwiązaniem jest pobranie Xcode 4.6.3 i zainstalowanie go w folderze Aplikacje . Następnie wprowadź w terminalu:

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer
gem install therubyracer

Po zainstalowaniu klejnotu możesz wrócić do Xcode 5.0:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Szymon
źródło
Jak przełączyć kompilator na Apple-gcc42?
user2711889
@Simon, kiedy próbuję połączyć się z kompilatorami, otrzymuję komunikat, że plik istnieje. Czy to plik clang? Jeśli uruchomię instalację pakietową, wygląda na to, że nie używa gcc, ponieważ błąd jest pełen odwołań do clang.
isea
Jeśli używasz MacPorts, nie musisz podawać linku symbolicznego, aby wskazywać na inną wersję GCC, jest do tego wbudowane polecenie (zobacz moją odpowiedź).
jshkol
6

Znalazłem obejście, które działało bez instalowania Apple-gcc42.

To zadziała, jeśli wyświetlany komunikat o błędzie wygląda następująco:

clang: error: no such file or directory: '/Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a'

Następnie powinieneś być w stanie wykonać następujące czynności:

brew install v8
bundle install 
# after failing create link from brew installed v8 to error location
ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a /Users/mscottford/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
bundle install

Źródło: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348

M. Scott Ford
źródło
Ogromne +1 dla tego. Klejnot instalował się w CLI, ale RubyMine v6 odmawiał instalacji ... ustawienie tego dowiązania symbolicznego ostatecznie rozwiązało problem. Dzięki!
Oda
1
To 1000%, pozdrawiam @ M.ScottFord. Używam rvm i dlatego moje oświadczenie w ln brzmiało:ln -s /usr/local/Cellar/v8/3.21.17/lib/libv8_base.x64.a ~/.rvm/gems/ruby-1.9.3-p327/gems/libv8-3.3.10.4/lib/libv8/build/v8/libv8.a
Dave Foster
3

Jak sugerowano w wielu odpowiedziach, najłatwiejszą rzeczą do zrobienia jest skompilowanie natywnych rozszerzeń Ruby Racer z Apple GCC 4.2 (zamiast wersji zainstalowanej z Xcode).

Jeśli używasz MacPorts, nie powinieneś ręcznie zajmować się konfigurowaniem dowiązań symbolicznych dla plików binarnych GCC. port selectKomenda zrobi to za Ciebie. Jeśli nie zaktualizowałeś MacPorts od czasu zainstalowania Mavericks, wykonaj sudo port selfupdate. Mając aktualne MacPorts, wypróbuj następujące rozwiązania:

# If you don't have it, install the port for Apple's GCC 4.2
sudo port install apple-gcc42 

    # OR

# If you had apple-gcc42 already (before Mavericks), update it
sudo port upgrade apple-gcc42


# Same result as manual symlinking of GCC in other answers
sudo port select gcc apple-gcc42 && hash -r

# Install therubyracer, will install libv8 gem dependency
#  *note* if you have any existing versions of these gems, remove them
gem install therubyracer

# Restore GCC to system default (optional)
sudo port select gcc none && hash -r

Ogólnie ta procedura ( sudo port select gcc [version]) będzie działać zawsze, gdy będziesz chciał użyć określonej wersji GCC zamiast tej zainstalowanej przez Xcode (Apple LLVM v5 dla 10.9 Mavericks / Xcode 5).

jshkol
źródło
1
Pracował dla mnie na indywidualności.
Evo_x
3

Udało mi się zainstalować therubyracer 0.12 i libv8 3.16.14.3 na Ruby 2.0.0p353 i OS X 10.9

libv8 wymaga gcc42

brew install v8
brew install apple-gcc42
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/g++-4.2 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/cpp-4.2 /usr/bin/cpp
gem install libv8

therubyracer wymaga później gcc

brew install gcc49
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/gcc-4.9 /usr/bin/gcc
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/g++-4.9 /usr/bin/g++
sudo ln -sf /usr/local/Cellar/gcc49/4.9-20131110/bin/cpp-4.9 /usr/bin/cpp

Gemfile

gem 'therubyracer', :require => 'v8', :platforms => :ruby

użyj bundlezamiastgem install therubyracer

Eugene
źródło
Dzięki! To w końcu pomogło mi bundle installpo wielu dniach prób i błędów. Jedyną rzeczą, którą zrobiłem inaczej, było odinstalowanie wszystkich narzędzi programistycznych, które zostały zainstalowane przez, brewdopóki nie gcc --versionpoinformowałem, że jest to wersja Apple LLVM i została skonfigurowana z Xcode, a następnie przeniosłem istniejący /usr/bin/gcc(i inni) przed dowiązaniem symbolicznym apple-gcc42 libs, zamiast instalować gcc49 (ostatnim razem, gdy próbowałem, zajęło to konfigurację), po prostu skopiowałem z powrotem oryginalne biblioteki gcc, g ++ i cpp. Biorąc pod uwagę, że wypróbowałem 3 tuziny różnych sposobów, aby znaleźć ten, który zadziałał dla mnie, YMMV
Chris Bloom
3

Powinien to być bezpieczny i czysty sposób (bez dowiązań symbolicznych) na instalację programurubyracer dla każdego, kto ma problemy.

Zaczerpnięte z: gem install therubyracer -v 0.11.4 kończy się niepowodzeniem w systemie OS X 10.10

zainstaluj Xcode (jeśli nie masz jeszcze jednej z tych wersji) 6.1.1, 6.2-beta lub 6.3-beta i (ta jest wymagana) 4.6.3

gem uninstall libv8 jeśli jeszcze tego nie zrobiłeś

przejdź do Xcode 4.6.3

sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developer

gem install libv8 -v '3.11.8.17' Lub jakakolwiek wersja jest powiązana z twoją wersją listy rankingowej

przełącz na Xcode 6.1.1, 6.2-beta lub 6.3-beta (lub jeśli chcesz wypróbować obecną instalację Xcode, dostosuj tę linię, potwierdziłem wszystkie 3 z tych działań)

sudo xcode-select --switch /Applications/Xcode6.1.1.app/Contents/Developer

gem install therubyracer -v '0.11.4' lub wersję, którą próbujesz zainstalować.

Travis
źródło
1
Dzięki @ th01 to zadziałało dla mnie ... Próbowałem wszystkiego, co mogłem znaleźć przez 3 godziny ... w moim przypadku był to klejnot libv8. Pobrał Xcode4.6.3 i uruchomił go z tą wersją i został pomyślnie zainstalowany. Oto link z krótkim samouczkiem, jak zainstalować wiele wersji Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf
Kiedy pobieram Xcode 4.6.3, a następnie uruchamiam, sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developera następnie uruchamiam gem install libv8 -v '3.3.10.4', otrzymuję: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Co robię niepoprawnie?
Wylliam Judd
1

Miałem prawie identyczny błąd, kiedy próbowałem zainstalować therubyracer 0.12.0, aby działał z libv8. To zadziałało dla mnie:

$ brew upgrade gcc

$ gem uninstall therubyracer

$ gem uninstall libv8

$ gem install therubyracer -v '0.12.0'
Fetching: therubyracer-0.12.0.gem (100%)
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.0
1 gem installed

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions with: '--with-system-v8'
This could take a while...
Successfully installed libv8-3.16.14.3
1 gem installed
Javid Jamae
źródło
0

Miałem ten sam problem podczas aktualizacji z OSX Mountain Lion do OSX Mavericks.

Uaktualnienie z ruby-1.8.7-p354 do ruby-1.8.7-375 załatwiło sprawę.

Może spróbuj zaktualizować z Ruby 1.9.3-p194 do rc1 (1.9.3 jest teraz powyżej p484)

zakładając, że używasz rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install
nelsonenzo
źródło
0

Miałem ten problem po aktualizacji z Mavericks do Yosemite. Problem polegał na tym, że skompilowałem moją wersję Ruby ze starą wersją OSX.

Gdybym pobiegł

ruby -rubygems -e 'puts Gem::Platform.new(RUBY_PLATFORM)'

Dostałbym x86_64-darwin-13zamiast x86_64-darwin-14Yosemite.

Aby ponownie zainstalować Ruby I

  1. Całkowicie usunięta stara wersja: rvm remove ruby-2.1.1
  2. Ponownie zainstalowany ze źródła (--disable-binary nie używa wstępnie skompilowanych plików binarnych i wymusza kompilację): rvm reinstall --disable-binary 2.1

Potem mogłem działać bundle installbez błędów po wypróbowaniu wszystkich powyższych rozwiązań.

Moemars
źródło
-2

To, co zrobiłem, to na OSX Mavericks:

git clone [email protected]:cowboyd/therubyracer.git

Następnie:

gem build therubyracer.gemspec
gem install therubyracer-0.12.1.gem

Ta procedura pobrała binarną wersję libv8 i zainstalowała ją.

darmou
źródło