Instalando a libv8 gem no OS X 10.9 ou superior


212

Estou tentando instalar a libv8 3.16.14.3, mas obtendo um erro no OSX Mavericks usando o último rvm estável e o ruby-1.9.3-p125.

Esta é a saída da execução do comando '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

Respostas:


463

Isso ocorre porque o OS X 10.9+ está usando a versão 4.8 do GCC. Isso não é suportado oficialmente em versões mais antigas da libv8, conforme mencionado na solicitação de recebimento ( https://github.com/cowboyd/libv8/pull/95 ). Por favor, tente aumentar a versão da libv8 no seu Gemfile (ou) a bundle updatedeve ser suficiente. Espero que isto ajude.

No README da libv8

Traga seu próprio V8

Como a libv8 é a interface para o mecanismo V8 usado pelo therubyracer, você pode precisar usar a libv8, mesmo se você já tiver o V8 instalado. Se você deseja usar sua própria instalação da V8, em vez de construí-la para você, use a opção --with-system-v8.

Usando RubyGems:

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

Usando o Bundler (no seu Gemfile):

configuração do pacote build.libv8 --with-system-v8

Por favor note que se você pretende rodar seu próprio V8, você deve instalar o V8 e seus cabeçalhos (encontrado em libv8-dev para distribuições Debian).

Traga seu próprio compilador

Você pode especificar um compilador de sua escolha, definindo a variável de ambiente CXX antes da compilação ou adicionando a opção --with-cxx = à configuração do pacote configurável:

configuração do pacote build.libv8 --with-cxx = clang ++

Editar:

Se esse problema for causado por therubyracer, tente o seguinte, conforme sugerido por rider_on_rails aqui :

gem desinstalar libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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


Infelizmente, não posso alterar a versão da libv8 no projeto em que estou trabalhando. Vou fazer o downgrade para o OSX 10.8 por enquanto!
tanookiben

35
--with-system-v8FTW!
JPowell 4/04

24
Obrigado! bundle config build.libv8 --with-system-v8 ajuda!
Andrey Skuratovsky

7
bundle updateme
salvou

6
Caso alguém obtenha o seguinte problema com o therubyracergem depois de resolvê-lo: stackoverflow.com/questions/23536893/…
Gustavo Semião-Lobo

219

Você pode instalar essa versão no Mavericks:

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

Posso confirmar que funciona com rbenv e ruby ​​1.9.3p448


5
Mesmo por mim - OS X 10.9, rbenv e ruby-2.0.0-P247
roo

1
Trabalhou em 1.8.7 para um projeto antigo :)
Juan de Dios H.

3
Por que isso funciona? Qual parte do comando está modificando --with-system-v8 e o que está fazendo?
precisa

4
Conforme as instruções aqui, o github.com/cowboyd/libv8 libv8 permite que você use uma versão pré-existente do mecanismo V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) em vez de compilar você mesmo. É a compilação que é um problema nos independentes, pois os compiladores C ++ foram alterados. Você pode compilar libV8-se usando as instruções aqui ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw

5
trabalhos com rbenv e Ruby 2.1.1 -gem install libv8 -- --with-system-v8
Andrew

35

Solução El Capitan para mim:

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

Onde REQUIRED_LIBV8_VERSIONeu estava 3.16.14.7, mas você precisa verificar qual é o que você precisa no seu pacote (este foi o caminho para os trilhos 4.2.5)

Você também pode precisar executar os comandos acima como superusuário (se suas gemas e bibliotecas do sistema forem globais)


4
Você não deve usar o sudo para instalar o brew ou instalar o gem. Isso cria problemas de permissão.
22416 bendangelo

2
@ BenDangelo, o que você diz é absolutamente correto. Embora o sistema às vezes exija privilégios de root para instalar o software, é uma prática ruim usar o sudo de maneira geral. Vou editar minha resposta, obrigado.
Evgenia Manolova 23/02

Funciona para mim! obrigado. Esta foi a única solução funcional.
Charles Hamel

14

Quando tentei a resposta aceita, a libv8 seria instalada com êxito gem install libv8, mas bundle installfalharia na libv8. Eu acho que bundle installestava tentando instalar uma versão diferente da libv8. Consegui encontrar uma solução que funcionou para mim.

Eu precisava da libv8 porque o therubyracer depende disso. Para instalá-lo, observei a versão que não estava sendo instalada no gem_make.outlog do therubyracer. (O caminho para ogem_make.out log estará na mensagem de falha.) No meu caso, era 3.16.14.7. (Esta versão provavelmente mudará com o tempo, caso você esteja lendo isso daqui a três anos.) Então eu fiz isso:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- observe sinalizador diferente da resposta aceita

o que permitiu que isso funcionasse:

gem install therubyracer

o que me permitiu completar o meu bundle install.

Isso funcionou para mim no OSX Yosemite.


Devo observar que a instalação do pacote foi interrompida imediatamente após a atualização para o OSX Yosemite, e foi por isso que tive que encontrar esta solução.
Steven Hirlston

Isso funciona de maneira brilhante no OS X Yosemite, enquanto muitas outras respostas simplesmente não funcionam.
Roy Li

Obrigado companheiro. 'therubyracer' finalmente instalado.
Kiryl Plyashkevich 26/09/18

8

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

A solução de jasonlynes encontrada nesse link fez o truque para mim. qualquer outra coisa não funcionou.

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

1
Não posso acreditar por que isso ainda é um problema em 2020 ... Obrigado @ Stefanos.Ioannou, esta é a solução que funcionou para mim.
Abraham Milano

6

Você pode configurar o bundler em vez de precisar conhecer cada versão. @ 3.15 pode ser substituído por outras versões.

$ brew install v8@3.15
$ bundle config build.libv8 --with-system-v8
$ bundle config build.therubyracer --with-v8-dir=$(brew --prefix v8@3.15)
$ bundle install

1
Funciona no macOS Catalina. Obrigado!
Aleksandr K.

4

Atualizei para o macOS Catalina @ 10.15 e ruby 2.6.5. Depois de um tempo temos libv8e therubyracerinstalar novamente, embora eu recomendo não MacOS atualização ainda (eu ouviruby deve ser fino).

Primeiro, eu tive que atualizar o XCode

  1. xcode-select --install

Eu costumava rbenvatualizar rubye definir a rubyversão manualmente /Users/<username>/.rbenv/versionpara 2.6.5. Embora isso não importe se o seu projeto contém um .ruby-versionarquivo.

Então eu limpei qualquer versão que instalei fro libv8(geralmente em /usr/local/opt/): brew uninstall v8,brew uninstall libv8@3.15

  1. brew install v8@3.15

Agora, seguindo https://github.com/cowboyd/libv8#do-i-get-a-binary , instalei

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

e então poderia executar bundle installsem erros.


4

Meu problema é que therubyracer, quando atualizar para macOS 10.15eruby-2.6.5

E o seguinte funciona para mim:

brew install v8@3.15

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

gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8@3.15


1

Eu tive esse mesmo problema quando atualizei do OSX Mountain Lion para o OSX Mavericks. A resposta aceita funcionou para libv8, mas não quando fui instalar o pacote therubyracer gem.

Atualizar o ruby-1.8.7-p354 para ruby-1.8.7-375 fez o truque para mim. As gems libv8 (3.16.14.3-x86_64-darwin-13) e therubyracer (0.12.0) instaladas sem problemas.

supondo que você use 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

1

Isso funcionou bem pra mim:

Tente instalar esta jóia pré-compilada:

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

Ou se você preferir criar o seu próprio:

  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

Fonte: https://github.com/cowboyd/libv8/issues/107

Obrigado a Felix Bünemann pela correção!


1

Tentei várias soluções descritas nas respostas anteriores, mas descobri que a execução de um pacote (para instalar outras gemas ausentes) tentaria recompilar a libv8 (apesar de já a ter instalado com êxito usando --with-system-v8 ) e, portanto, sofre do mesmo problema.

Eventualmente, descobri que remover a gem libv8, buscar o arquivo gem de rubygems e depois instalar manualmente o .gemarquivo com o --with-system-v8sinalizador funcionou para mim.

ie

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

Agradeço à resposta de Gaurav Agarwal por me levar pelo caminho certo!


1

Nada disso me ajudou ... não importa o que eu fiz, minha instalação gem do therubyracer continuava reclamando com este erro:

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

O que finalmente me ajudou foi este outro fórum que eu encontrei em https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

A solução final que funcionou para mim:

Eu tive que adicionar essas linhas ao meu arquivo .zshrc:

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

Então eu tive que executar estes comandos:

source ~/.zshrc
brew tap homebrew/homebrew-core
brew install v8@3.15
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/v8@3.15
bundle install

Espero que alguém ache isso útil!



0

No MAC-Yosemite com ambiente RVM e na versão ruby-2.1.1

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

Funciona com a ajuda do comando acima, pode confirmar isso.


0

O que realmente funcionou para mim foi atualizar o ruby ​​para a 2.2.0, remover o Gemfile.lock e agrupar novamente.

Trabalhou como um encanto!


0

Isto é o que funcionou para mim.

substitua 3.16.14.7por sua versão.

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

isso força um GCC mais antigo, que seria um band-aid na melhor das hipóteses e definitivamente causará problemas no futuro.
Jim Wrubel

0

Eu enfrentei um problema semelhante em El Cap. Aqui está o que eu fiz.

brew tap homebrew/dupes
brew install apple-gcc42

E depois,

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

Finalmente,

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

0

Eu estava usando uma versão beta do Xcode para outro projeto e tinha esquecido. Volte com xcode-select. Algo como:

sudo xcode-select --switch /Applications/Xcode.app/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.