“Gem install therubyracer -v '0.10.2'” em osx mavericks não instalando


90

Tentando instalar therubyracer em mavericks usando "gem install therubyracer -v '0.10.2'", mas estou recebendo o seguinte erro:

/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

Alguém pode me ajudar a descobrir como fazer essa joia funcionar? Eu tenho as ferramentas de linha de comando instaladas.


Você tem homebrew? Tente instalar o v8 brew install v8antes de instalar o gem
— Ivan Shamatov

Eu acredito que o brew install v8 é um problema separado. Consulte stackoverflow.com/questions/11598655/therubyracer-install-error para obter detalhes sobre v8 com cerveja.
— Ash Blue de

Respostas:


242

Se você decidir usar uma therubyracerversão mais recente de gem, você não terá mais esse problema

De outra forma:

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

11
Esta abordagem parece melhor do que modificar links simbólicos
— Nilesh

3
brew tap homebrew/dupescorrige "Erro: nenhuma fórmula disponível para apple-gcc42"
— TomFuertes

1
Isso FINALMENTE corrigiu o problema para mim - obrigado! Eu tentei a solução de link simbólico de M. Scott Ford abaixo e pareceu funcionar, mas gerou um erro quando eu realmente tentei fazer qualquer coisa (rake, rails, etc).
— Kyle Fox

2
Sua atualização para o therubyracer 0.12.0 corrigiu esse problema para mim.
— jackocnr de

6
Infelizmente, nenhuma dessas soluções está funcionando para mim no OSX 10.9, ruby ​​2.1.0 e therubyracer 0.12.1.
— turboladen 01 de

16

Então eu finalmente consegui fazer funcionar depois de algumas lutas ... graças a Simon e Alvaro.

Tenho uma coisa a acrescentar, porém, usar a sinalização --with-system-v8 não funcionou para mim ... Então, removi meu sistema v8 com

brew uninstall v8

E a corrida

gem install libv8

Se você já executou gem install libv8com o sinalizador do sistema v8, certifique-se de desinstalar essa versão gem (faça isso executando gem uninstall libv8). O importante é que você não deve usar o fornecido pelo brew, ele parece não funcionar no Mavericks (ele é instalado bem e o bundler irá relatar que seu pacote está completo, mas seu aplicativo irá falhar ao tentar usar o v8 )

Para resumir a resposta, fazer o seguinte funcionou para mim:

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

2
Isso funcionou para mim. Mas eu vinculei gcc em / usr / local / bin e reiniciei o terminal para que eu pudesse removê-lo após instalar libv8.
— Jamon Holmgren de

2
Ligar simbolicamente os binários do homebrew com essa versão específica, em / usr / bin, é realmente uma má ideia. O próximo brew updateque vem e acelera esses caminhos o deixará em um estado quebrado.
— mrm

10

Eu tive o mesmo problema, isso funciona para mim:

terubiracer (0.10.2) & libv8 (3.3.10.4)

Em primeiro lugar:

  • brew install apple-gcc42
  • você deve ligar todos os arquivos binários dos compiladores ( gcc, cpp, g++) para/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Depois, você pode tentar isto:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'ou bundle installno diretório do projeto rails.

apple-gcc42: This formula either does not compile or function as expected on macOS Meu macOS é 10.12.6
— Wylliam Judd

7

Acabei de ter o mesmo problema e uma solução atualmente é usar apple-gcc42 em vez de clang para compilar as duas joias:

brew install apple-gcc42

E então você tem a escolha entre fazer alguns links simbólicos em / usr / bin para binários {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

Na verdade, g ++ deve ser suficiente.

Ou ... você pode exportar variáveis ​​de ambiente CC / CXX / CPP com caminhos correspondentes aos binários criados pelo homebrew. Essa é certamente uma solução alternativa mais limpa.

Uma terceira solução é baixar o Xcode 4.6.3 e instalá-lo na pasta Aplicativos . Em seguida, digite no terminal:

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

Assim que a gem for instalada, você pode voltar para o Xcode 5.0:

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

Como faço para mudar o compilador para apple-gcc42?
— user2711889

@Simon quando tento criar um symlinc para os compiladores, recebo uma mensagem de que o arquivo existe. Esse é o arquivo clang? Se eu executar o bundle install, ele não parece estar usando o gcc porque o erro está cheio de referências de clang.
— isea

Se você estiver usando MacPorts, você não precisa criar um link simbólico para apontar para uma versão diferente do GCC, existe um comando embutido para isso (veja minha resposta).
— jshkol

6

Eu encontrei uma solução alternativa que funcionou sem instalar o apple-gcc42.

Isso funcionará se a mensagem de erro que você está recebendo for assim:

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'

Então você deve ser capaz de fazer o seguinte:

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

Fonte: https://github.com/cowboyd/therubyracer/issues/277#issuecomment-27734348


Grande +1 para este. O gem seria instalado na CLI, mas RubyMine v6 se recusava a instalá-lo ... definir este link simbólico resolveu o problema finalmente. Obrigado!
— Ode

1
Isso 1000%, elogia @ M.ScottFord. Eu uso o rvm e, portanto, minha declaração de ln foi esta: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

Como sugerido em muitas respostas, a coisa mais fácil a fazer é compilar as extensões nativas do Ruby Racer com o Apple GCC 4.2 (em vez da versão instalada com o Xcode).

Se você estiver usando MacPorts, não deverá ter que lidar manualmente com a configuração de links simbólicos para os binários do GCC. O port selectcomando faz isso por você. Se você não atualizou MacPorts desde a instalação do Mavericks, faça a sudo port selfupdate. Com o MacPorts atualizado, tente o seguinte:

# 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

Em geral, este procedimento ( sudo port select gcc [version]) funcionará sempre que você quiser usar uma versão específica do GCC em vez da instalada pelo Xcode (Apple LLVM v5 para 10.9 Mavericks / Xcode 5).


1
Trabalhou para mim em mavericks.
— Evo_x

3

Consigo instalar o therubyracer 0.12 e libv8 3.16.14.3 no ruby ​​2.0.0p353 e os x 10.9

libv8 requer 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 requer gcc posterior

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

use em bundlevez degem install therubyracer


Obrigado! Isso finalmente me superou bundle installdepois de dias de tentativa e erro. A única coisa que fiz de maneira diferente foi desinstalar todas as ferramentas de desenvolvedor que foram instaladas por brewaté gcc --versioninformar que era a versão Apple LLVM e foi configurada com Xcode, então movi o existente /usr/bin/gcc(et. Al.) Antes de criar um link simbólico para apple-gcc42 libs, então, em vez de instalar o gcc49 (da última vez que tentei, ele assumiu uma configuração), apenas copiei as libs gcc, g ++ e cpp originais de volta. Dado que tentei 3 dúzias de maneiras diferentes de encontrar a que funcionou para mim, YMMV
— Chris Bloom

3

Esta deve ser uma forma segura e limpa (sem links simbólicos) de instalar o therubyracer para qualquer um que tenha problemas.

Retirado de: gem install therubyracer -v 0.11.4 falha no OS X 10.10

instale o Xcode (se você ainda não tiver uma dessas versões) 6.1.1, 6.2-beta ou 6.3-beta e (este é necessário) 4.6.3

gem uninstall libv8 se você ainda não fez

mudar para Xcode 4.6.3

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

gem install libv8 -v '3.11.8.17' Ou qualquer versão que esteja ligada à sua versão do therubyracer

mude para o Xcode 6.1.1, 6.2-beta ou 6.3-beta (ou se você quiser tentar a instalação atual do Xcode, ajuste esta linha, eu confirmei que todos os três funcionam)

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

gem install therubyracer -v '0.11.4' ou a versão que você está tentando instalar.


1
Obrigado @ th01 funcionou para mim ... tentei de tudo que pude encontrar por 3 horas ... no meu caso, foi a libv8 gem. Baixei o Xcode4.6.3, executei-o com essa versão e foi instalado com sucesso. Aqui está um link com um tutorial rápido sobre como instalar várias versões do Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
— miligraf

Quando eu faço download do Xcode 4.6.3, executo sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developere executo gem install libv8 -v '3.3.10.4', recebo: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! O que estou fazendo incorretamente?
— Wylliam Judd,

1

Eu tive um erro quase idêntico ao tentar instalar o therubyracer 0.12.0 para fazê-lo funcionar com o libv8. Isso funcionou para mim:

$ 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

0

Tive o mesmo problema quando atualizei do OSX Mountain Lion para o OSX Mavericks.

Atualizar de ruby-1.8.7-p354 para ruby-1.8.7-375 funcionou para mim.

Tente atualizar do ruby ​​1.9.3-p194 para rc1 (1.9.3 está acima do p484 agora)

presumindo que você use rbenv:

rbenv install 1.9.3-rc1
rbenv rehash
rbenv global 1.9.3-rc1
bundle install

0

Tive esse problema depois de atualizar do Mavericks para o Yosemite. O problema é que compilei minha versão Ruby com a versão antiga do OSX.

Se eu corresse

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

Eu obteria em x86_64-darwin-13vez dex86_64-darwin-14 para Yosemite.

Para reinstalar Ruby I

  1. Versão anterior completamente removida: rvm remove ruby-2.1.1
  2. Reinstalado a partir da fonte (o --disable-binary não usa binários pré-compilados e força uma compilação): rvm reinstall --disable-binary 2.1

Então consegui rodar bundle installsem erros depois de tentar todas as soluções acima.


-2

O que eu fiz foi em osx mavericks:

git clone git@github.com:cowboyd/therubyracer.git

Então:

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

Este procedimento baixou uma versão binária de libv8 e a instalou.

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.