Instalowanie klejnotu libv8 w systemie OS X 10.9+

212

Próbuję zainstalować libv8 3.16.14.3, ale pojawia się błąd w OSX Mavericks przy użyciu najnowszego stabilnego rvm i ruby-1.9.3-p125.

Oto wynik uruchomienia polecenia „gem install libv8”:

~/src(branch:master) » gem install libv8
Fetching: libv8-3.16.14.3.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing therubyracer:
  ERROR: Failed to build gem native extension.

    /Users/me/.rvm/rubies/ruby-1.9.3-p125/bin/ruby extconf.rb
creating Makefile
Compiling v8 for x64
Using python 2.7.5
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Using compiler: g++
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make[1]: *** [/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/libpreparser_lib.a] Error 1
make: *** [x64.release] Error 2
/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:36:in `block in verify_installation!': libv8 did not install properly, expected binary v8 archive '/Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/tools/gyp/libv8_base.a'to exist, but it was not found (Libv8::Location::Vendor::ArchiveNotFound)
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `each'
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:35:in `verify_installation!'
  from /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/location.rb:26:in `install!'
  from extconf.rb:7:in `<main>'
GYP_GENERATORS=make \
  build/gyp/gyp --generator-output="out" build/all.gyp \
                -Ibuild/standalone.gypi --depth=. \
                -Dv8_target_arch=x64 \
                -S.x64  -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/allocation.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/atomicops_internals_x86_gcc.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/bignum-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/cached-powers.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/conversions.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/diy-fp.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/fast-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/fixed-dtoa.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/once.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparse-data.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparser.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/preparser-api.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/scanner.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/strtod.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/token.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/unicode.o
  CXX(target) /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/obj.target/preparser_lib/src/utils.o
  LIBTOOL-STATIC /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/vendor/v8/out/x64.release/libpreparser_lib.a


Gem files will remain installed in /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3 for inspection.
Results logged to /Users/me/.rvm/gems/ruby-1.9.3-p125@proj-rails3-ruby19/gems/libv8-3.16.14.3/ext/libv8/gem_make.out
tanookiben
źródło

Odpowiedzi:

463

Wynika to z faktu, że OS X 10.9+ korzysta z wersji 4.8 GCC. Nie jest to oficjalnie obsługiwane w starszych wersjach libv8, jak wspomniano w żądaniu ściągnięcia ( https://github.com/cowboyd/libv8/pull/95 ). Spróbuj zwiększyć wersję libv8 w swoim pliku Gemfile (lub) a bundle updatepowinno wystarczyć. Mam nadzieję że to pomoże.

Z libv8 README

Przynieś swój własny V8

Ponieważ libv8 jest interfejsem dla silnika V8 używanego przez therubyracer, może być konieczne użycie libv8, nawet jeśli masz już zainstalowany V8. Jeśli chcesz użyć własnej instalacji V8, a nie zbudować ją dla siebie, użyj opcji --with-system-v8.

Korzystanie z RubyGems:

gem zainstaluj libv8 [-v YOUR_VERSION] - --with-system-v8

Za pomocą Bundlera (w twoim Gemfile):

pakiet konfiguracji build.libv8 --with-system-v8

Pamiętaj, że jeśli zamierzasz uruchomić własną wersję V8, musisz zainstalować zarówno wersję V8, jak i jej nagłówki (znalezione w libv8-dev dla dystrybucji Debian).

Przynieś własny kompilator

Możesz określić wybrany kompilator, ustawiając zmienną środowiskową CXX przed kompilacją lub dodając opcję --with-cxx = do konfiguracji pakietu:

pakiet konfiguracji build.libv8 --with-cxx = clang ++

Edytować:

Jeśli ten problem jest powodowany przez therubyracer, spróbuj wykonać następujące czynności zgodnie z sugestią rider_on_rails tutaj :

odinstaluj gem libv8

gem zainstaluj therubyracer -v YOUR_RUBY_RACER_VERSION

gem zainstaluj libv8 -v YOUR_VERSION - --with-system-v8

Gaurav Agarwal
źródło
Niestety nie mogę zmienić wersji libv8 w projekcie, nad którym pracuję. Przejdę na teraz do OSX 10.8!
tanookiben
35
--with-system-v8FTW!
JPowell
24
Dzięki! bundle config build.libv8 --with-system-v8 pomaga!
Andrey Skuratovsky,
7
bundle updateuratował mnie z królestwa zdrętwienia i
niedoskonałości jabłek
6
Na wypadek, gdyby therubyracerpo rozwiązaniu tego problemu
wystąpił
219

Możesz faktycznie zainstalować tę wersję na Mavericks:

gem install libv8 -v 3.11.8.17 -- --with-system-v8

Mogę potwierdzić, że działa z Rbenv i Ruby 1.9.3p448

Oliver Shaw
źródło
5
To samo dla mnie - OS X 10.9, Rbenv and Ruby-2.0.0-P247
Roo
1
Pracowałem nad 1.8.7 dla starego projektu :)
Juan de Dios H.
3
Dlaczego to działa? Która część polecenia modyfikuje --with-system-v8 i co robi?
David Krider
4
Zgodnie z instrukcjami tutaj github.com/cowboyd/libv8 libv8 pozwala używać wcześniejszej wersji silnika V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) zamiast kompilowania go samemu. Jest to kompilacja, która jest problemem u indywidualistów, ponieważ zmieniły się kompilatory C ++. Możesz samodzielnie skompilować libV8, postępując zgodnie z instrukcjami tutaj ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw
5
współpracuje z rbenv i ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew
35

Rozwiązanie El Capitan dla mnie:

$ brew install v8
$ gem install libv8 -v REQUIRED_LIBV8_VERSION -- --with-system-v8

Gdzie REQUIRED_LIBV8_VERSIONdla mnie był 3.16.14.7, ale musisz sprawdzić, który jest potrzebny w twoim pakiecie (to był ten dla szyn 4.2.5)

Może być także konieczne uruchomienie powyższych poleceń jako superużytkownik (jeśli twoje klejnoty i biblioteki systemowe są globalne)

Evgenia Manolova
źródło
4
Nie powinieneś używać sudo do instalacji browaru lub instalacji klejnotów. Powoduje to problemy z uprawnieniami.
bendangelo
2
@benDangelo, to co mówisz jest absolutnie poprawne. Mimo że system czasami może wymagać uprawnień administratora do instalowania oprogramowania, używanie sudo jest ogólnie złym rozwiązaniem. Zmienię swoją odpowiedź, dzięki.
Evgenia Manolova
Mi to pasuje! Dziękuję Ci. To było jedyne działające rozwiązanie.
Charles Hamel
14

Kiedy próbowałem zaakceptować odpowiedź, libv8 instalowałby się pomyślnie gem install libv8, ale bundle installnie działałby na libv8. Myślę, że bundle installpróbowałem zainstalować inną wersję libv8. Byłem w stanie znaleźć rozwiązanie, które działało dla mnie.

Potrzebowałem libv8, ponieważ zależy od niego program Therubyracer. Aby go zainstalować, zauważyłem wersję, której nie udało się zainstalować w gem_make.outdzienniku programu therubyracer. (Ścieżka do gem_make.outdziennika będzie w komunikacie o błędzie.) W moim przypadku była to 3.16.14.7. (Ta wersja prawdopodobnie z czasem się zmieni, na wypadek, gdybyś czytał to za trzy lata.) Potem to zrobiłem:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- zanotuj inną flagę niż zaakceptowana odpowiedź

co pozwoliło na to:

gem install therubyracer

co pozwoliło mi ukończyć moje bundle install.

To działało dla mnie na OSX Yosemite.

Steven Hirlston
źródło
Powinienem zauważyć, że instalacja pakietu zepsuła się dla mnie natychmiast po aktualizacji do OSX Yosemite, dlatego musiałem znaleźć to rozwiązanie.
Steven Hirlston
Działa to doskonale na OS X Yosemite, podczas gdy wiele innych odpowiedzi po prostu nie działa.
Roy Li
Dzięki stary. W końcu zainstalowano „therubyracer”.
Kiryl Plyashkevich,
8

https://github.com/cowboyd/therubyracer/issues/339

Rozwiązanie jasonlynesa znalezione w tym linku stanowiło dla mnie sztuczkę. wszystko inne nie działało.

brew install homebrew/versions/v8-315
brew link --overwrite v8-315 --force
gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -v '0.12.2' -- --with-system-v8
Stefanos Ioannou
źródło
1
Nie mogę uwierzyć, dlaczego wciąż jest to problem w 2020 roku ... Dzięki @ Stefanos. Ioannou to rozwiązanie, które zadziałało dla mnie.
Abraham Milano
6

Możesz skonfigurować program pakujący zamiast znać każdą wersję. @ 3.15 można zastąpić innymi wersjami.

$ brew install [email protected]
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix [email protected])
$ bundle install
Peter DeWeese
źródło
1
Działa na macOS Catalina. Dziękuję Ci!
Aleksandr K.
4

Zaktualizowałem do macOS Catalina @ 10.15 i ruby 2.6.5. Po pewnym czasie dostałem libv8i therubyracerzainstalować ponownie, chociaż nie polecam jeszcze aktualizować macOS (słyszałem, że rubypowinno być dobrze).

Najpierw musiałem zaktualizować XCode

  1. xcode-select --install

Kiedyś rbenvaktualizowałem rubyi rubyręcznie ustawiałem wersję /Users/<username>/.rbenv/versionna 2.6.5. Chociaż nie powinno to mieć znaczenia, jeśli Twój projekt zawiera .ruby-versionplik.

Następnie oczyścić dowolną wersję zainstalowałem fro libv8(zazwyczaj /usr/local/opt/) brew uninstall v8,brew uninstall [email protected]

  1. brew install [email protected]

Teraz, po https://github.com/cowboyd/libv8#do-i-get-a-binary , zainstalowałem

  1. gem install libv8 -v '3.16.14.19' -- --with-system-v8

a następnie może działać bundle installbez błędów.

chriszo111
źródło
4

Mój problem jest od therubyracerkiedy, kiedy aktualizacja do macOS 10.15iruby-2.6.5

I następujące dla mnie działa:

brew install [email protected]

gem install libv8 -v 3.16.14.19 -- --with-system-v8

gem install therubyracer -- --with-v8-dir=/usr/local/opt/[email protected]
Alan Wang
źródło
1

Miałem ten sam problem podczas aktualizacji z OSX Mountain Lion do OSX Mavericks. Przyjęta odpowiedź działała w przypadku libv8, ale nie wtedy, gdy poszedłem zainstalować pakiet klejnotu therubyracer.

Uaktualnienie z ruby-1.8.7-p354 do ruby-1.8.7-375 załatwiło sprawę. libv8 (3.16.14.3-x86_64-darwin-13) i klejnoty therubyracer (0.12.0) zainstalowane bez problemu.

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

rbenv versions
  system
  * 1.8.7-p354
  2.0.0-rc2

rbenv uninstall 1.8.7-p354
rbenv install 1.8.7-p375

rbenv versions
  system
  * 1.8.7-p375
  2.0.0-rc2

bundle install
nelsonenzo
źródło
1

To działało dobrze dla mnie:

Spróbuj zainstalować ten wstępnie skompilowany klejnot:

https://dl.dropboxusercontent.com/u/7919548/gems/libv8/libv8-3.11.8.17-x86_64-darwin-13.gem (sha1: 5ce07aaf4085fff5a5e10fe018fd6b22021bef3b)

Lub jeśli wolisz zbudować własny:

  git clone https://github.com/cowboyd/libv8.git
  cd libv8
  git checkout 3.11
  bundle install
  bundle exec rake clean build binary
  gem install pkg/libv8-3.11.8.17-x86_64-darwin-13.gem

Źródło: https://github.com/cowboyd/libv8/issues/107

Dzięki Felixowi Bünemannowi za naprawę !

Tilo
źródło
1

Wypróbowałem kilka rozwiązań opisanych w poprzednich odpowiedziach, ale okazało się, że uruchomienie pakietu (w celu zainstalowania innych, brakujących klejnotów) spróbuje ponownie skompilować libv8 (pomimo tego, że już pomyślnie go zainstalowałem --with-system-v8) i tym samym wystąpi ten sam problem.

W końcu odkryłem, że usunięcie klejnotu libv8, pobranie pliku klejnotów z rubygemów, a następnie ręczne zainstalowanie .gempliku z --with-system-v8flagą zadziałało dla mnie.

to znaczy

gem uninstall libv8
gem fetch libv8 -v LIBV8_VERSION
gem install libv8-LIBV_VERSION.gem -- --with-system-v8
bundle

Dzięki odpowiedzi Gaurav Agarwal za poprowadzenie mnie właściwą ścieżką!

XtraSimplicity
źródło
1

Nic mi to nie pomogło ... bez względu na to, co zrobiłem, moja instalacja klejnotów Therubyracer ciągle narzekała na ten błąd:

Unable to find a compiler officially supported by v8.
It is recommended to use GCC v4.4 or higher
Beginning compilation. This will take some time.
Building v8 with env CXX=clang++ LINK=clang++  /usr/local/bin/gmake x64.release ARFLAGS.target=crs werror=no
GYP_GENERATORS=make \
build/gyp/gyp --generator-output="out" build/all.gyp \
              -Ibuild/standalone.gypi --depth=. \
              -Dv8_target_arch=x64 \
              -S.x64 -Dmac_deployment_target=10.15 -Dv8_enable_backtrace=1 -Dv8_can_use_vfp2_instructions=true -Darm_fpu=vfpv2 -Dv8_can_use_vfp3_instructions=true -Darm_fpu=vfpv3 -Dwerror=''
  File "build/gyp/gyp", line 12
    except ImportError, e:
                      ^
SyntaxError: invalid syntax
gmake: *** [Makefile:268: out/Makefile.x64] Error 1

Ostatecznie pomogło mi to inne forum, na które natknąłem się na https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

Ostateczne rozwiązanie, które zadziałało dla mnie:

Musiałem dodać te linie do mojego pliku .zshrc:

export CXX=clang++
export GYPFLAGS=-Dmac_deployment_target=10.15

Następnie musiałem uruchomić następujące polecenia:

source ~/.zshrc
brew tap homebrew/homebrew-core
brew install [email protected]
gem uninstall therubyracer
gem uninstall libv8
gem install libv8 -v '3.16.14.19' -- --with-system-v8
gem install therubyracer -v '0.12.3' -- --with-v8-dir=/usr/local/opt/[email protected]
bundle install

Mam nadzieję, że ktoś inny uzna to za przydatne!

Tom Chapin
źródło
0

Możesz spróbować ręcznie skompilować i zainstalować klej za pomocą metody wymienionej na stronie github libv8.

RonanOD
źródło
0

W MAC-Yosemite ze środowiskiem RVM i wersją Ruby-2.1.1

gem install libv8 -v 3.16.14.3 -- --with-v8-lib gem install therubyracer

Działa za pomocą powyższego polecenia, może to potwierdzić.

Kishore Mohan
źródło
0

Naprawdę działało dla mnie uaktualnienie Ruby do 2.2.0, usunięcie Gemfile.lock i ponowne pakowanie.

Działa jak urok!

tomascharad
źródło
0

To działało dla mnie.

zamień na 3.16.14.7swoją wersję.

bundle install
gem install libv8 -v '3.16.14.7' -- --with-system-v8

bundle install
gem uninstall libv8 -v '3.16.14.7' -- --with-system-v8

brew install homebrew/dupes/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

bundle install
Arian Faurtosh
źródło
zmusza to starszego gcc, który byłby w najlepszym przypadku zespołem pomocniczym i na pewno spowodowałby problemy na dalszych etapach.
Jim Wrubel,
0

Napotkałem podobny problem na El Cap. Oto co zrobiłem.

brew tap homebrew/dupes
brew install apple-gcc42

I wtedy,

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

Wreszcie,

brew uninstall v8
gem install libv8 -v 3.11.8.17 -- --with-system-v8
bittterbotter
źródło
0

Użyłem wersji beta Xcode do innego projektu i zapomniałem. Przełącz z powrotem za pomocą xcode-select. Coś jak:

sudo xcode-select --switch /Applications/Xcode.app/
huwr
źródło
-6

Usuń z Gemfile:

klejnot „therubyracer”,: platform =>: ruby

Roberto Capelo
źródło
2
Ten rodzaj pokonuje cały cel tego postu.
Dan