Cài đặt libv8 gem trên OS X 10.9+


212

Tôi đang cố gắng cài đặt libv8 3.16.14.3 nhưng gặp lỗi trên OSX Mavericks sử dụng rvm và ruby-1.9.3-p125 ổn định mới nhất.

Đây là đầu ra của việc chạy lệnh '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

Câu trả lời:


463

Điều này là do thực tế rằng OS X 10.9+ đang sử dụng phiên bản 4.8 của GCC. Điều này không được hỗ trợ chính thức trong các phiên bản cũ hơn của libv8 như được đề cập trong yêu cầu kéo ( https://github.com/cowboyd/libv8/pull/95 ). Vui lòng thử nâng cấp phiên bản libv8 trong Gemfile (hoặc) của bundle updatebạn. Hi vọng điêu nay co ich.

Từ libv8 README

Mang động cơ V8 của riêng bạn

Vì libv8 là giao diện cho động cơ V8 được sử dụng bởi Therubyracer, bạn có thể cần sử dụng libv8, ngay cả khi bạn đã cài đặt V8. Nếu bạn muốn sử dụng cài đặt V8 của riêng mình, thay vì cài đặt sẵn cho bạn, hãy sử dụng tùy chọn --with-system-v8.

Sử dụng RubyGems:

cài đặt đá quý libv8 [-v YOU_VERSION] - - với hệ thống-v8

Sử dụng Bundler (trong Gemfile của bạn):

gói cấu hình build.libv8 - với hệ thống-v8

Xin lưu ý rằng nếu bạn có ý định chạy V8 của riêng mình, bạn phải cài đặt cả V8 và các tiêu đề của nó (được tìm thấy trong libv8-dev cho các bản phân phối Debian).

Mang theo trình biên dịch của riêng bạn

Bạn có thể chỉ định trình biên dịch mà bạn chọn bằng cách đặt biến môi trường CXX trước khi biên dịch hoặc bằng cách thêm tùy chọn --with-cxx = vào cấu hình gói:

gói cấu hình build.libv8 --with-cxx = clang ++

Biên tập:

Nếu vấn đề này được đưa ra bởi therubyracer, hãy thử những điều sau theo đề xuất của rider_on_rails tại đây :

đá quý gỡ cài đặt libv8

cài đặt đá quý trị liệu -v YOU_RUBY_RACER_VERSION

cài đặt đá quý libv8 -v YOU_VERSION - - với hệ thống-v8


Thật không may, tôi không thể thay đổi phiên bản libv8 trong dự án tôi đang làm. Bây giờ tôi sẽ hạ cấp xuống OSX 10.8!
tanookiben

35
--with-system-v8FTW!
JPowell

24
Cảm ơn! bundle config build.libv8 --with-system-v8 giúp!
Andrey Skuratovsky

7
bundle updatebảo lãnh tôi ra khỏi cõi tê liệt và táo-nâng cấp-đau khổ
saihgala

6
Trong trường hợp ai đó gặp vấn đề sau với therubyracerđá quý sau khi giải quyết vấn đề này: stackoverflow.com/questions/23536893/
mẹo

219

Bạn thực sự có thể cài đặt phiên bản đó trên Mavericks:

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

Tôi có thể xác nhận điều này hoạt động với rbenv và ruby ​​1.9.3p448


5
Tương tự đối với tôi - os x 10.9, rbenv và ruby-2.0.0-p247
roo

1
Làm việc trên 1.8.7 cho một dự án cũ :)
Juan de Dios H.

3
Tại sao điều này làm việc? Phần nào của lệnh là --with-system-v8 sửa đổi, và nó đang làm gì?
David Krider

4
Theo hướng dẫn ở đây, github.com/cowboyd/libv8 libv8 cho phép bạn sử dụng phiên bản trước của động cơ V8 ( en.wikipedia.org/wiki/V8_(JavaScript_engine) ) thay vì tự biên dịch. Đó là phần biên dịch là một vấn đề trong mavericks khi trình biên dịch C ++ đã thay đổi. Bạn có thể tự biên dịch libV8 bằng cách sử dụng các hướng dẫn tại đây ( stackoverflow.com/a/19668162/2012130 )
Oliver Shaw

5
hoạt động với rbenv và ruby ​​2.1.1 -gem install libv8 -- --with-system-v8
Andrew

35

Giải pháp El Capitan cho tôi:

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

Nơi REQUIRED_LIBV8_VERSIONtôi ở 3.16.14.7, nhưng bạn cần kiểm tra xem cái nào bạn cần trong gói của bạn (đây là cái cho đường ray4.2.5 )

Bạn cũng có thể cần chạy các lệnh ở trên dưới dạng siêu người dùng (nếu thư viện hệ thống và đá quý của bạn là toàn cầu)


4
Bạn không nên sử dụng sudo để cài đặt brew hoặc gem install. Điều này tạo ra các vấn đề cho phép.
uốn cong

2
@benDangelo, những gì bạn nói là hoàn toàn chính xác. Mặc dù hệ thống đôi khi có thể yêu cầu quyền root để cài đặt phần mềm, đó là một cách thực hành tồi để sử dụng sudo trên cơ sở chung. Tôi sẽ chỉnh sửa câu trả lời của tôi, cảm ơn.
Evgenia Manolova

Nó làm việc cho tôi! cảm ơn bạn. Đây là giải pháp làm việc duy nhất.
Charles Hamel

14

Khi tôi thử câu trả lời được chấp nhận, libv8 sẽ cài đặt thành công gem install libv8, nhưng bundle installsẽ thất bại trên libv8. Tôi nghĩ rằng bundle installđã cố gắng cài đặt một phiên bản libv8 khác. Tôi đã có thể tìm một giải pháp hiệu quả cho tôi.

Tôi cần libv8 vì trị liệu phụ thuộc vào nó. Để cài đặt nó, tôi lưu ý rằng phiên bản không cài đặt được trong gem_make.outnhật ký dành cho trị liệu. (Đường dẫn cho gem_make.outnhật ký sẽ nằm trong thông báo lỗi.) Trong trường hợp của tôi, đó là 3.16.14.7. (Phiên bản này có thể sẽ thay đổi theo thời gian, trong trường hợp bạn đang đọc ba năm kể từ bây giờ.) Sau đó, tôi đã làm điều này:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <- lưu ý cờ khác với câu trả lời được chấp nhận

cho phép điều này hoạt động:

gem install therubyracer

cho phép tôi để hoàn thành của tôi bundle install.

Điều này làm việc cho tôi trên OSX Yosemite.


Tôi nên lưu ý rằng gói cài đặt đã bị hỏng ngay lập tức sau khi tôi nâng cấp lên OSX Yosemite, đó là lý do tại sao tôi phải tìm giải pháp này.
Steven Hirlston

Điều này hoạt động tuyệt vời trên OS X Yosemite trong khi nhiều câu trả lời khác đơn giản là không hoạt động.
Roy Li

Cảm ơn bạn đời. 'Therubyracer' cuối cùng đã được cài đặt.
Kiryl Plyashkevich

8

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

Giải pháp của jasonlynes được tìm thấy trên liên kết đó đã tạo ra mánh khóe cho tôi. bất cứ điều gì khác đã không làm việc.

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
Tôi không thể tin được tại sao điều này vẫn còn là một vấn đề vào năm 2020 ... Cảm ơn @ Stefanos.Ioannou đây là giải pháp hiệu quả với tôi.
Abraham Milano

6

Bạn có thể cấu hình bundler thay vì phải biết từng phiên bản. @ 3.15 có thể được thay thế bằng các phiên bản khác.

$ 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
Hoạt động trên macOS Catalina. Cảm ơn bạn!
Alexanderr K.

4

Tôi đã cập nhật lên macOS Catalina @ 10.15ruby 2.6.5. Sau một thời gian nhận libv8therubyracercài đặt lại, mặc dù tôi khuyên bạn chưa nên cập nhật macOS (tôi nghe nói rubysẽ ổn thôi).

Đầu tiên, tôi phải cập nhật XCode

  1. xcode-select --install

Tôi sử dụng rbenvđể cập nhật ruby, và thiết lập các rubyphiên bản bằng tay trong /Users/<username>/.rbenv/versionđể 2.6.5. Mặc dù điều này không quan trọng nếu dự án của bạn chứa một .ruby-versiontệp.

Sau đó, tôi dọn dẹp bất kỳ phiên bản tôi đã cài đặt fro libv8(thường là trong /usr/local/opt/): brew uninstall v8,brew uninstall libv8@3.15

  1. brew install v8@3.15

Bây giờ, theo dõi https://github.com/cowboyd/libv8#do-i-get-a-binary , tôi đã cài đặt

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

và sau đó có thể chạy bundle installmà không có lỗi.


4

Vấn đề của tôi là từ therubyracerkhi cập nhật macOS 10.15ruby-2.6.5

Và các công việc sau đây đối với tôi:

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

Tôi gặp vấn đề tương tự khi tôi nâng cấp từ OSX Mountain Lion lên OSX Mavericks. Câu trả lời được chấp nhận đã làm việc cho libv8, nhưng không phải khi tôi đi đến gói cài đặt đá quý trị liệu.

Nâng cấp từ ruby-1.8.7-p354 lên ruby-1.8.7-375 đã giúp tôi rất nhiều. libv8 (3.16.14.3-x86_64-darwin-13) và đá quý trị liệu (0.12.0) được cài đặt mà không gặp vấn đề gì.

giả sử bạn sử dụng 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

Điều này làm việc tốt cho tôi:

Hãy thử cài đặt đá quý được biên dịch trước này:

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

Hoặc nếu bạn muốn xây dựng của riêng bạn:

  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

Nguồn: https://github.com/cowboyd/libv8/issues/107

Cảm ơn Felix Bünemann đã sửa chữa!


1

Tôi đã thử một số giải pháp được nêu trong các câu trả lời trước, nhưng thấy rằng gói chạy (để cài đặt các viên ngọc bị thiếu khác) sẽ cố gắng biên dịch lại libv8 (mặc dù đã cài đặt thành công bằng cách sử dụng --with-system-v8 ) và do đó gặp phải vấn đề tương tự.

Cuối cùng, tôi thấy rằng loại bỏ đá quý libv8, tìm nạp tệp đá quý từ rubygems, sau đó cài đặt .gemtệp bằng tay với--with-system-v8 cờ làm việc cho tôi.

I E

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

Cảm ơn câu trả lời của Gaurav Agarwal đã dẫn tôi đi đúng đường!


1

Không ai trong số này giúp tôi ... bất kể tôi đã làm gì, bản cài đặt đá quý của tôi đã tiếp tục phàn nàn với lỗi này:

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

Điều cuối cùng đã giúp tôi là diễn đàn khác mà tôi tình cờ tìm thấy tại https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15

Giải pháp cuối cùng phù hợp với tôi:

Tôi đã phải thêm những dòng này vào tệp .zshrc của mình:

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

Sau đó, tôi đã phải chạy các lệnh này:

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

Tôi hy vọng người khác thấy điều này hữu ích!



0

Trong MAC-Yosemite với môi trường RVM và phiên bản ruby-2.1.1

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

Nó hoạt động với sự trợ giúp của lệnh trên, có thể xác nhận điều này.


0

Điều thực sự hiệu quả với tôi là nâng cấp ruby ​​lên 2.2.0, loại bỏ Gemfile.lock và gói lại.

Làm việc như người ở!


0

Đây là những gì làm việc cho tôi.

thay thế 3.16.14.7bằng phiên bản của bạn.

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

điều này buộc một gcc cũ hơn, đó sẽ là một nhóm hỗ trợ tốt nhất và chắc chắn sẽ gây ra vấn đề.
Jim Wrubel

0

Tôi đã phải đối mặt với một vấn đề tương tự trên El Cap. Đây là những gì tôi đã làm.

brew tap homebrew/dupes
brew install apple-gcc42

Và sau đó,

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

Cuối cùng,

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

0

Tôi đã sử dụng phiên bản beta của Xcode cho một dự án khác và đã quên. Chuyển lại với xcode-select. Cái gì đó như:

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

-6

Xóa khỏi Gemfile:

đá quý 'Therubyracer' ,: platform =>: ruby


2
Đây là loại đánh bại toàn bộ mục đích của bài này.
Dan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.