在OS X 10.9+上安装libv8 gem


212

我正在尝试安装libv8 3.16.14.3,但使用最新的稳定rvm和ruby-1.9.3-p125在OSX Mavericks上出现错误。

这是运行命令“ 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

Answers:


463

这是由于OS X 10.9+使用的是GCC 4.8版本。如请求请求(https://github.com/cowboyd/libv8/pull/95)中所述,旧版本的libv8对此不正式支持。请尝试在您的Gemfile中提高libv8的版本(或)bundle update就足够了。希望这可以帮助。

从libv8 自述文件

带上自己的V8

因为libv8是therubyracer使用的V8引擎的接口,所以即使您已经安装了V8,也可能需要使用libv8。如果您希望使用自己的V8安装,而不是为您自己构建,请使用--with-system-v8选项。

使用RubyGems:

gem install libv8 [-v YOUR_VERSION]---with-system-v8

使用Bundler(在您的Gemfile中):

捆绑配置build.libv8 --with-system-v8

请注意,如果您打算运行自己的V8,则必须同时安装V8及其标头(在Debian发行版的libv8-dev中找到)。

带上自己的编译器

您可以通过在编译之前设置CXX环境变​​量,或在捆绑包配置中添加--with-cxx =选项来指定所需的编译器:

捆绑配置build.libv8 --with-cxx = clang ++

编辑:

如果这个问题拿来就用therubyracer,请尝试以下所建议rider_on_rails 这里

gem卸载libv8

gem安装therubyracer -v YOUR_RUBY_RACER_VERSION

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


不幸的是,我无法在我正在处理的项目中更改libv8的版本。我现在将降级到OSX 10.8!
tanookiben

35
--with-system-v8FTW!
JPowell 2014年

24
谢谢! bundle config build.libv8 --with-system-v8 帮助!
Andrey Skuratovsky

7
bundle update将我从麻木和苹果升级带来的痛苦中
解脱出来

6
万一有人用得到以下问题的therubyracer解决这一个宝石后:stackoverflow.com/questions/23536893/...
古斯塔沃Semião-路宝

219

您实际上可以在Mavericks上安装该版本:

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

我可以使用rbenv和ruby 1.9.3p448确认此作品


5
对我来说一样-操作系统x 10.9,rbenv和ruby-2.0.0-p247
roo

1
在1.8.7上为一个旧项目工作:)
Juan de Dios H.

3
为什么这样做?--with-system-v8修改命令的哪一部分,它在做什么?
大卫·克里德

4
按照此处的说明github.com/cowboyd/libv8 libv8允许您使用预先存在的V8引擎版本(en.wikipedia.org/wiki/V8_(JavaScript_engine))而不是自己编译。由于C ++编译器已发生更改,因此在特立独行者中,这是一个问题。您可以使用此处的说明自己编译libV8(stackoverflow.com/a/19668162/2012130
Oliver Shaw,

5
适用于rbenv和ruby 2.1.1-– gem install libv8 -- --with-system-v8
Andrew

35

El Capitan解决方案对我来说:

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

REQUIRED_LIBV8_VERSION对我来说是哪里3.16.14.7,但是您需要检查一下捆绑包中需要的那个(这是用于rails的那个4.2.5

您可能还需要以超级用户身份运行上述命令(如果您的gem和系统库是全局的)


4
您不应该将sudo用于brew install或gem install。这会产生权限问题。
bentangelo '16

2
@benDangelo,您说的是完全正确的。即使系统有时可能需要root特权才能安装软件,但在一般情况下使用sudo还是一个不好的做法。谢谢,我将编辑我的回复。
Evgenia Manolova

这个对我有用!谢谢。这是唯一可行的解​​决方案。
查尔斯·哈默尔

14

当我尝试接受的答案时,libv8将使用成功安装gem install libv8,但bundle install在libv8上将失败。我认为这bundle install是在尝试安装其他版本的libv8。我找到了适合我的解决方案。

我需要libv8,因为therubyracer依赖它。要安装它,我在gem_make.outtherubyracer 的日志中记录了未能安装的版本。(gem_make.out日志的路径将在失败消息中。)在我来说,它是3.16.14.7。(此版本可能会随着时间的推移而更改,以防您从现在开始读这三年。)然后我这样做了:

gem install libv8 -v 3.16.14.7 -- --with-v8-lib <-注意与接受的答案不同的标志

这使它可以工作:

gem install therubyracer

这使我完成了我的任务bundle install

这在OSX Yosemite上对我有用。


我应该注意,升级到OSX Yosemite后,捆绑包安装立即对我造成了干扰,这就是为什么我必须找到此解决方案的原因。
史蒂文·希尔斯顿

这在OS X Yosemite上非常有效,而许多其他答案根本行不通。
Roy Li

谢了哥们。终于安装了“ therubyracer”。
Kiryl Plyashkevich

8

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

在该链接上找到的jasonlynes解决方案对我来说是成功的窍门。其他没有任何作用。

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
我不敢相信为什么到2020年这仍然是个问题...谢谢@ Stefanos.Ioannou,这是对我有用的解决方案。
亚伯拉罕·米兰诺

6

您可以配置捆绑程序,而不必知道每个版本。@ 3.15可以替换为其他版本。

$ 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
在macOS Catalina上工作。谢谢!
Aleksandr K.

4

我已更新到macOS Catalina @ 10.15ruby 2.6.5。过了一会儿,libv8然后therubyracer再次安装,尽管我建议不要更新macOS(听说ruby应该没问题)。

首先,我必须更新XCode

  1. xcode-select --install

我曾经rbenv进行过更新ruby,并将ruby版本手动设置/Users/<username>/.rbenv/version2.6.5。尽管项目中是否包含.ruby-version文件都没有关系。

然后,我清理了我来回安装任何版本libv8(通常/usr/local/opt/brew uninstall v8brew uninstall libv8@3.15

  1. brew install v8@3.15

现在,按照https://github.com/cowboyd/libv8#do-i-get-a-binary安装

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

然后可以正常运行bundle install


4

我的问题是因为therubyracer,当更新到macOS 10.15ruby-2.6.5

以下对我有用:

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

从OSX Mountain Lion升级到OSX Mavericks时,我遇到了同样的问题。可接受的答案适用于libv8,但当我捆绑安装therubyracer gem时无效。

从ruby-1.8.7-p354升级到ruby-1.8.7-375对我有用。安装libv8(3.16.14.3-x86_64-darwin-13)和therubyracer(0.12.0)gem时没有问题。

假设您使用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

这对我来说很好:

尝试安装此预编译的gem:

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

或者,如果您更喜欢自己构建:

  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

资料来源:https : //github.com/cowboyd/libv8/issues/107

感谢FelixBünemann的修复!


1

我尝试了先前答案中概述的多种解决方案,但发现运行bundle(以安装其他缺少的gems)会尝试重新编译libv8(尽管已使用成功安装了它--with-system-v8),因此遇到了同样的问题。

最终,我发现删除libv8 gem,从rubygems获取gem文件,然后.gem使用带有--with-system-v8标志的手动安装文件对我来说很有效。

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

感谢 Gaurav Agarwal的带领我走上正确道路的答案


1

这些都没有帮助我...不管我做什么,我安装的rubyracer的gem一直抱怨此错误:

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

最终帮助我的是我在https://www.bountysource.com/issues/82833405-libv8-fails-to-build-on-catalina-10-15偶然发现的另一个论坛

对我有用的最终解决方案:

我必须将这些行添加到我的.zshrc文件中:

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

然后,我必须运行以下命令:

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

我希望其他人觉得这有用!



0

在具有RVM环境和ruby-2.1.1版本的MAC-Yosemite中

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

它在以上命令的帮助下工作,可以确认这一点。


0

对我真正有用的是将ruby升级到2.2.0,删除Gemfile.lock并再次捆绑。

像魅力一样工作!


0

这对我有用。

3.16.14.7用您的版本替换。

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

这将迫使一个年龄较大的海湾合作委员会(GCC)充其量只能是一个创可贴,肯定会在将来引起问题。
Jim Wrubel

0

我在El Cap上也遇到过类似的问题。这就是我所做的。

brew tap homebrew/dupes
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 install libv8 -v 3.11.8.17 -- --with-system-v8

0

我在另一个项目中使用的是Xcode的Beta版本,但忘记了。使用切换回xcode-select。就像是:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.