“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.

user2711889
fonte
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
Julian Popov
fonte
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
damianmr
fonte
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.
Alvaro
fonte
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
Simon
fonte
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

M. Scott Ford
fonte
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).

jshkol
fonte
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

Eugene
fonte
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.

Travis
fonte
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
Javid Jamae
fonte
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
nelsonenzo
fonte
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.

Moemars
fonte
-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.

Darmou
fonte