Menginstal libv8 gem pada OS X 10.9+

212

Saya mencoba untuk menginstal libv8 3.16.14.3 tetapi mendapatkan kesalahan pada OSX Mavericks menggunakan rvm stabil terbaru dan ruby-1.9.3-p125.

Ini adalah output dari menjalankan perintah '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
sumber

Jawaban:

463

Ini disebabkan oleh fakta bahwa OS X 10.9+ menggunakan versi 4.8 dari GCC. Ini tidak didukung secara resmi dalam versi libv8 yang lebih lama seperti yang disebutkan dalam permintaan tarik ( https://github.com/cowboyd/libv8/pull/95 ). Silakan coba menaikkan versi libv8 di Gemfile Anda (atau) a bundle updatesudah cukup. Semoga ini membantu.

Dari README libv8

Bawa V8 Anda sendiri

Karena libv8 adalah antarmuka untuk mesin V8 yang digunakan oleh therubyracer, Anda mungkin perlu menggunakan libv8, bahkan jika Anda sudah menginstal V8. Jika Anda ingin menggunakan instalasi V8 Anda sendiri, daripada membuatnya untuk Anda, gunakan opsi --with-system-v8.

Menggunakan RubyGems:

permata instal libv8 [-v YOUR_VERSION] - --with-system-v8

Menggunakan Bundler (di Gemfile Anda):

bundel config build.libv8 --with-system-v8

Harap dicatat bahwa jika Anda bermaksud untuk menjalankan V8 Anda sendiri, Anda harus menginstal V8 dan headernya (ditemukan di libv8-dev untuk distro Debian).

Bawalah kompiler Anda sendiri

Anda dapat menentukan kompiler pilihan Anda dengan menyetel variabel lingkungan CXX sebelum kompilasi, atau dengan menambahkan opsi --with-cxx = ke konfigurasi bundel:

bundel config build.libv8 --with-cxx = clang ++

Edit:

Jika masalah ini muncul therubyracer, coba yang berikut ini seperti yang disarankan oleh rider_on_rails di sini :

uninstall uninstall libv8

permata instal therubyracer -v YOUR_RUBY_RACER_VERSION

permata instal libv8 -v YOUR_VERSION - --with-system-v8

Gaurav Agarwal
sumber
Sayangnya saya tidak dapat mengubah versi libv8 di proyek yang saya kerjakan. Saya akan turun ke OSX 10.8 untuk saat ini!
tanookiben
35
--with-system-v8FTW!
JPowell
24
Terima kasih! bundle config build.libv8 --with-system-v8 membantu!
Andrey Skuratovsky
7
bundle updatemenyelamatkan saya dari alam mati rasa dan kesengsaraan peningkatan-apel-ditimbulkan
saihgala
6
Jika seseorang mendapatkan masalah berikut dengan therubyracerpermata setelah menyelesaikan yang ini: stackoverflow.com/questions/23536893/…
Gustavo Semião-Lobo
219

Anda dapat menginstal versi itu di Mavericks:

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

Saya dapat mengkonfirmasi ini berfungsi dengan rbenv dan ruby ​​1.9.3p448

Oliver Shaw
sumber
5
Sama bagi saya - os x 10.9, rbenv dan ruby-2.0.0-p247
roo
1
Bekerja pada 1.8.7 untuk proyek lama :)
Juan de Dios H.
3
Mengapa ini bekerja? Bagian mana dari perintah yang memodifikasi --dengan sistem-v8, dan apa fungsinya?
David Krider
4
Sesuai instruksi di sini github.com/cowboyd/libv8 libv8 memungkinkan Anda menggunakan versi mesin V8 yang sudah ada ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) daripada mengkompilasi sendiri. Ini adalah kompilasi yang merupakan masalah di maverick karena kompiler C ++ telah berubah. Anda dapat mengkompilasi libV8 sendiri menggunakan instruksi di sini ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw
5
bekerja dengan rbenv dan ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew
35

Solusi El Capitan untuk saya:

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

Di mana REQUIRED_LIBV8_VERSIONuntuk saya 3.16.14.7, tetapi Anda perlu memeriksa mana yang Anda butuhkan di bundel Anda (ini adalah untuk rel 4.2.5)

Anda juga mungkin perlu menjalankan perintah di atas sebagai superuser (jika permata dan pustaka sistem Anda bersifat global)

Evgenia Manolova
sumber
4
Anda tidak boleh menggunakan sudo untuk brew install atau permata install. Ini menciptakan masalah izin.
bendangelo
2
@ BenDangelo, apa yang Anda katakan benar-benar benar. Meskipun sistem kadang-kadang mungkin memerlukan hak akses root untuk menginstal perangkat lunak, itu adalah praktik yang buruk untuk menggunakan sudo secara umum. Saya akan mengedit jawaban saya, terima kasih.
Evgenia Manolova
Ini bekerja untuk saya! Terima kasih. Ini adalah satu-satunya solusi yang berhasil.
Charles Hamel
14

Ketika saya mencoba jawaban yang diterima, libv8 akan berhasil diinstal dengan gem install libv8, tetapi bundle installakan gagal pada libv8. Saya pikir itu bundle installsedang mencoba untuk menginstal versi libv8 yang berbeda. Saya dapat menemukan solusi yang berhasil untuk saya.

Saya membutuhkan libv8 karena therubyracer tergantung padanya. Untuk menginstalnya, saya mencatat versi yang gagal dipasang di gem_make.outlog untuk therubyracer. (Jalur untuk gem_make.outlog akan ada dalam pesan kegagalan.) Dalam kasus saya ini adalah 3.16.14.7. (Versi ini mungkin akan berubah seiring waktu, kalau-kalau Anda membaca ini tiga tahun dari sekarang.) Lalu saya melakukan ini:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- perhatikan tanda yang berbeda dari jawaban yang diterima

yang memungkinkan ini berfungsi:

gem install therubyracer

yang memungkinkan saya untuk menyelesaikan bundle install.

Ini bekerja untuk saya di OSX Yosemite.

Steven Hirlston
sumber
Saya harus mencatat bahwa instalasi bundel rusak untuk saya segera setelah saya memutakhirkan ke OSX Yosemite, itulah sebabnya saya harus menemukan solusi ini.
Steven Hirlston
Ini berfungsi dengan baik pada OS X Yosemite sementara banyak jawaban lainnya tidak berfungsi.
Roy Li
Terima kasih sobat. 'therubyracer' akhirnya diinstal.
Kiryl Plyashkevich
8

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

Solusi jasonlynes yang ditemukan pada tautan itu membuat trik untuk saya. apa pun tidak berhasil.

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
sumber
1
Saya tidak percaya mengapa ini masih menjadi masalah pada tahun 2020 ... Terima kasih @ Stefanos.Ioannou ini adalah solusi yang bekerja untuk saya.
Abraham Milano
7

Anda dapat mengonfigurasi bundler alih-alih harus tahu setiap versi. @ 3.15 dapat diganti dengan versi lain.

$ 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
sumber
1
Bekerja pada MacOS Catalina. Terima kasih!
Aleksandr K.
4

Saya memperbarui ke macOS Catalina @ 10.15 dan ruby 2.6.5. Setelah beberapa saat mendapat libv8dan therubyracermenginstal lagi, meskipun saya akan merekomendasikan untuk tidak memperbarui macOS (saya dengar rubyseharusnya baik-baik saja).

Pertama, saya harus memperbarui XCode

  1. xcode-select --install

Saya biasa rbenvmemperbaruiruby , dan mengatur rubyversi secara manual /Users/<username>/.rbenv/versionke 2.6.5. Meskipun ini seharusnya tidak masalah jika proyek Anda mengandung .ruby-versionfile.

Lalu aku dibersihkan versi saya menginstal mondar-mandir libv8(biasanya dalam /usr/local/opt/): brew uninstall v8,brew uninstall [email protected]

  1. brew install [email protected]

Sekarang, ikuti https://github.com/cowboyd/libv8#do-i-get-a-binary , saya menginstal

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

dan kemudian bisa berjalan bundle installtanpa kesalahan.

chriszo111
sumber
4

Masalah saya adalah sejak therubyracersaat pembaruan ke macOS 10.15danruby-2.6.5

Dan berikut ini bekerja untuk saya:

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
sumber
1

Saya memiliki masalah yang sama ketika saya memutakhirkan dari OSX Mountain Lion ke OSX Mavericks. Jawaban yang diterima bekerja untuk libv8, tetapi tidak ketika saya pergi untuk bundel menginstal gem therubyracer.

Memutakhirkan dari ruby-1.8.7-p354 ke ruby-1.8.7-375 melakukan trik untuk saya. libv8 (3.16.14.3-x86_64-darwin-13) dan therubyracer (0.12.0) permata dipasang tanpa masalah.

dengan asumsi Anda menggunakan 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
sumber
1

Ini bekerja dengan baik untuk saya:

Coba pasang permata yang sudah dikompilasi ini:

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

Atau jika Anda lebih suka membangun sendiri:

  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

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

Terima kasih kepada Felix Bünemann untuk perbaikannya!

Tilo
sumber
1

Saya mencoba sejumlah solusi yang dijabarkan dalam jawaban sebelumnya, tetapi menemukan bahwa menjalankan bundel (untuk menginstal yang lain, permata yang hilang) akan mencoba mengkompilasi ulang libv8 (walaupun sudah berhasil diinstal dengan menggunakan --with-system-v8 ) dan karenanya menderita masalah yang sama.

Akhirnya, saya menemukan bahwa menghapus permata libv8, mengambil file permata dari rubygems, dan kemudian menginstal .gemfile secara manual dengan --with-system-v8flag bekerja untuk saya.

yaitu

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

Terima kasih atas jawaban Gaurav Agarwal yang telah menuntun saya ke jalan yang benar!

Kesederhanaan Xtra
sumber
1

Tak satu pun dari ini membantu saya ... apa pun yang saya lakukan, instal gemyracer permata saya terus mengeluh dengan kesalahan ini:

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

Apa yang akhirnya membantu saya adalah forum lain yang saya temukan di https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

Solusi terakhir yang berhasil bagi saya:

Saya harus menambahkan baris ini ke file .zshrc saya:

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

Kemudian saya harus menjalankan perintah-perintah ini:

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

Saya harap orang lain menemukan ini berguna!

Tom Chapin
sumber
0

Anda dapat mencoba menyusun dan menginstal permata secara manual melalui metode yang disebutkan di situs libv8 github.

RonanOD
sumber
0

Di MAC-Yosemite dengan lingkungan RVM dan versi ruby-2.1.1

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

Ini bekerja dengan bantuan perintah di atas, dapat mengkonfirmasi ini.

Kishore Mohan
sumber
0

Apa yang benar-benar bekerja untuk saya adalah meningkatkan ruby ​​ke 2.2.0, menghapus Gemfile.lock dan bundling lagi.

Bekerja seperti pesona!

tomascharad
sumber
0

Inilah yang bekerja untuk saya.

ganti 3.16.14.7dengan versi Anda.

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
sumber
ini memaksa gcc yang lebih tua, yang akan menjadi bantuan band terbaik dan pasti akan menyebabkan masalah di jalan.
Jim Wrubel
0

Saya menghadapi masalah serupa di El Cap. Inilah yang saya lakukan.

brew tap homebrew/dupes
brew install apple-gcc42

Lalu,

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

Akhirnya,

brew uninstall v8
gem install libv8 -v 3.11.8.17 -- --with-system-v8
bittterbotter
sumber
0

Saya menggunakan Xcode versi beta untuk proyek lain dan lupa. Beralih kembali dengan xcode-select. Sesuatu seperti:

sudo xcode-select --switch /Applications/Xcode.app/
huwr
sumber
-6

Hapus dari Gemfile:

gem 'therubyracer',: platform =>: ruby

Roberto Capelo
sumber
2
Ini semacam kekalahan seluruh tujuan posting ini.
Dan