"Gem install therubyracer -v '0.10.2'" pada osx mavericks tidak terpasang


91

Mencoba menginstal therubyracer pada mavericks menggunakan "gem install therubyracer -v '0.10.2'" tetapi saya mendapatkan kesalahan berikut:

/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

Adakah yang bisa membantu saya mencari cara agar permata ini berfungsi? Saya telah menginstal alat baris perintah.


Apakah Anda memiliki homebrew? Coba instal v8 menggunakan brew install v8sebelum menginstal permata
Ivan Shamatov

Saya yakin brew install v8 adalah masalah terpisah. Silakan lihat stackoverflow.com/questions/11598655/therubyracer-install-error untuk detail tentang v8 dengan brew.
Ash Blue

Jawaban:


243

Jika Anda memutuskan untuk menggunakan therubyracerversi permata yang lebih baru , Anda tidak akan lagi mengalami masalah ini

Jika tidak:

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
Pendekatan ini tampaknya lebih baik daripada memodifikasi symlink
Nilesh

3
brew tap homebrew/dupesmemperbaiki "Kesalahan: Tidak ada formula yang tersedia untuk apple-gcc42"
TomFuertes

1
Ini AKHIRNYA memperbaiki masalah untuk saya - terima kasih! Saya mencoba solusi symlink M. Scott Ford di bawah ini dan tampaknya berhasil, tetapi membuat kesalahan ketika saya benar-benar mencoba melakukan apa pun (rake, rails, dll).
Kyle Fox

2
Anda memperbarui ke therubyracer 0.12.0 memperbaiki masalah ini untuk saya.
jackocnr

6
Sayangnya, tidak ada solusi ini yang berfungsi untuk saya di OSX 10.9, ruby ​​2.1.0, dan therubyracer 0.12.1.
turboladen

16

Jadi saya akhirnya berhasil setelah beberapa kesulitan ... terima kasih kepada Simon dan Alvaro.

Saya memiliki satu hal untuk ditambahkan, menggunakan flag --with-system-v8 tidak berfungsi untuk saya ... Jadi saya menghapus sistem v8 saya dengan

brew uninstall v8

Dan lari

gem install libv8

Jika Anda sudah menjalankan gem install libv8dengan flag system v8 pastikan untuk menghapus versi gem itu (lakukan dengan menjalankan gem uninstall libv8). Yang penting adalah Anda tidak boleh menggunakan yang disediakan oleh brew, tampaknya tidak berfungsi di Mavericks (terinstal dengan baik dan bundler akan melaporkan bahwa bundel Anda telah selesai, tetapi aplikasi Anda akan gagal ketika mencoba menggunakan v8 ).

Untuk meringkas jawabannya, melakukan hal berikut ini berhasil bagi saya:

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
Ini berhasil untuk saya. Tetapi saya menghubungkan gcc ke / usr / local / bin dan memulai ulang terminal sehingga saya dapat menghapusnya setelah saya menginstal libv8.
Jamon Holmgren

2
Symlinking homebrew binari dengan versi spesifik tersebut, ke / usr / bin, adalah ide yang sangat buruk. Berikutnya brew updateyang datang dan mengubah jalan itu akan membuat Anda dalam keadaan rusak.
mrm

10

Saya memiliki masalah yang sama, ini berhasil untuk saya:

therubyracer (0.10.2) & libv8 (3.3.10.4)

Pertama-tama:

  • brew install apple-gcc42
  • Anda harus menghubungkan semua file biner dari kompiler ( gcc, cpp, g++) ke/usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/<compiler>

Setelah itu, Anda bisa mencoba ini:

  • brew install v8
  • gem install libv8 -v '3.3.10.4' -- --with-system-v8
  • gem install therubyracer -v 'therubyracer'atau bundle installke dalam direktori proyek rel.

apple-gcc42: This formula either does not compile or function as expected on macOS MacOS saya adalah 10.12.6
Wylliam Judd

7

Saya baru saja mengalami masalah yang sama dan satu solusi saat ini adalah menggunakan apple-gcc42 alih - alih dentang untuk mengkompilasi kedua permata:

brew install apple-gcc42

Dan kemudian Anda memiliki pilihan antara melakukan beberapa symlink di / usr / bin untuk {gcc, g ++, c ++} binari:

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

Faktanya, g ++ seharusnya cukup.

Atau ... Anda dapat mengekspor variabel lingkungan CC / CXX / CPP dengan jalur yang sesuai dengan biner yang dibuat oleh homebrew. Itu pasti solusi yang lebih bersih.

Solusi ketiga adalah mengunduh Xcode 4.6.3 dan menginstalnya di folder Aplikasi . Kemudian, masuk ke terminal:

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

Setelah permata dipasang, Anda dapat beralih kembali ke Xcode 5.0:

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

Bagaimana cara mengalihkan kompiler ke apple-gcc42?
pengguna2711889

@ Simon ketika saya mencoba untuk symlinc ke kompiler saya mendapat pesan bahwa file tersebut ada. Apakah itu file dentang? Jika saya menjalankan pemasangan bundel, tampaknya tidak menggunakan gcc karena kesalahan penuh dengan referensi dentang.
isea

Jika Anda menggunakan MacPorts, Anda tidak perlu symlink untuk menunjuk ke versi GCC yang berbeda, ada perintah bawaan untuk itu (lihat jawaban saya).
jshkol

6

Saya menemukan solusi yang berfungsi tanpa menginstal apple-gcc42.

Ini akan berfungsi jika pesan kesalahan yang Anda dapatkan terlihat seperti ini:

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'

Maka Anda harus bisa melakukan hal berikut:

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

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


+1 besar untuk yang satu ini. Permata akan diinstal pada CLI tetapi RubyMine v6 menolak untuk menginstalnya ... pengaturan symlink ini akhirnya menyelesaikan masalah. Terima kasih!
Ode

1
1000% ini, tepuk tangan @ M. ScottFord. Saya menggunakan rvm dan oleh karena itu pernyataan ln saya adalah ini: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

Seperti yang disarankan dalam banyak jawaban, hal termudah untuk dilakukan adalah mengkompilasi ekstensi asli Ruby Racer dengan Apple GCC 4.2 (bukan versi yang diinstal dengan Xcode).

Jika Anda menggunakan MacPorts, Anda tidak perlu berurusan secara manual dengan pengaturan tautan simbolik untuk binari GCC. The port selectperintah melakukannya untuk Anda. Jika Anda belum memperbarui MacPorts sejak menginstal Mavericks, lakukan sudo port selfupdate. Dengan MacPorts up-to-date, coba yang berikut ini:

# 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

Secara umum, prosedur ini ( sudo port select gcc [version]) akan berfungsi kapan pun Anda ingin menggunakan versi GCC tertentu, bukan yang diinstal oleh Xcode (Apple LLVM v5 untuk 10.9 Mavericks / Xcode 5).


1
Bekerja untuk saya di mavericks.
Evo_x

3

Saya berhasil menginstal therubyracer 0.12 dan libv8 3.16.14.3 di ruby ​​2.0.0p353 dan os x 10.9

libv8 membutuhkan 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 membutuhkan gcc nanti

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

gunakan bundlesebagai penggantigem install therubyracer


Terima kasih! Ini akhirnya membuat saya melewati bundle installhari-hari trial and error. Satu-satunya hal yang saya lakukan secara berbeda adalah mencopot semua alat pengembang yang diinstal oleh brewsampai gcc --versiondilaporkan bahwa itu adalah versi Apple LLVM dan dikonfigurasi dengan Xcode, lalu saya memindahkan yang ada /usr/bin/gcc(et. Al.) Keluar sebelum menghubungkan ke apple-gcc42 libs, lalu alih-alih menginstal gcc49 (terakhir kali saya mencoba mengambil alih untuk mengkonfigurasi) saya hanya menyalin kembali gcc, g ++, dan cpp asli yang asli. Mengingat bahwa saya mencoba 3 lusin cara berbeda untuk menemukan salah satu yang bekerja untuk saya, YMMV
Chris Bloom

3

Ini harus menjadi cara yang aman dan bersih dari kegagalan (tanpa symlink) untuk menginstal subyracer bagi siapa pun yang mengalami masalah.

Diambil dari: gem install therubyracer -v 0.11.4 gagal di OS X 10.10

instal Xcode (jika Anda belum memiliki salah satu dari versi ini) 6.1.1, 6.2-beta atau 6.3-beta dan (yang ini diperlukan) 4.6.3

gem uninstall libv8 jika Anda belum melakukannya

beralih ke Xcode 4.6.3

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

gem install libv8 -v '3.11.8.17' Atau versi mana pun yang terkait dengan versi subyracer Anda

beralih ke Xcode 6.1.1, 6.2-beta atau 6.3-beta (atau jika Anda ingin mencoba menginstal Xcode Anda saat ini, sesuaikan baris ini, saya telah mengonfirmasi semua 3 pekerjaan ini)

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

gem install therubyracer -v '0.11.4' atau versi yang Anda coba pasang.


1
Terima kasih @ th01 ini berhasil untuk saya ... Saya mencoba semua yang dapat saya temukan selama 3 jam ... dalam kasus saya, itu adalah permata libv8. Mengunduh Xcode4.6.3 dan menjalankannya dengan versi itu dan berhasil diinstal. Berikut ini tautan dengan tutorial singkat tentang cara memasang beberapa versi Xcode: blogs.oracle.com/mobile/entry/how_to_install_multiple_xcodes
miligraf

Ketika saya mengunduh Xcode 4.6.3 dan kemudian menjalankan sudo xcode-select --switch /Applications/Xcode4.6.3.app/Contents/Developerdan kemudian menjalankan gem install libv8 -v '3.3.10.4'saya mendapatkan: unable to locate xcodebuild, please make sure the path to the Xcode folder is set correctly! Apa yang saya lakukan secara tidak benar?
Wylliam Judd

1

Saya mengalami kesalahan yang hampir identik ketika mencoba menginstal therubyracer 0.12.0 agar dapat berfungsi dengan libv8. Ini berhasil untuk saya:

$ 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

Saya mengalami masalah yang sama ketika saya memutakhirkan dari OSX Mountain Lion ke OSX Mavericks.

Mengupgrade dari ruby-1.8.7-p354 ke ruby-1.8.7-375 berhasil bagi saya.

Mungkin coba upgrade dari ruby ​​1.9.3-p194 ke rc1 (1.9.3 di atas p484 sekarang)

dengan asumsi Anda menggunakan rbenv:

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

0

Saya mengalami masalah ini setelah meningkatkan dari Mavericks ke Yosemite. Masalahnya adalah saya mengkompilasi versi Ruby saya dengan versi OSX yang lama.

Jika saya lari

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

Saya akan mendapatkan x86_64-darwin-13alih-alih x86_64-darwin-14untuk Yosemite.

Untuk menginstal ulang Ruby I

  1. Versi lama yang sepenuhnya dihapus: rvm remove ruby-2.1.1
  2. Diinstal ulang dari sumber (--disable-binary tidak menggunakan biner yang telah dikompilasi sebelumnya dan memaksa build): rvm reinstall --disable-binary 2.1

Kemudian saya dapat menjalankan bundle installtanpa kesalahan setelah mencoba semua solusi di atas.


-2

Apa yang saya lakukan adalah pada osx mavericks:

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

Kemudian:

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

Prosedur ini mengunduh versi biner libv8 dan menginstalnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.