首页 文章

在OS X 10.9上安装libv8 gem

提问于
浏览
196

我正在尝试安装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

16 回答

  • 422

    这是因为OS X 10.9使用的是GCC 4.8版本 . 在拉取请求(https://github.com/cowboyd/libv8/pull/95)中提到的旧版本的libv8中不正式支持此功能 . 请尝试在你的Gemfile(或)中提升libv8的版本 bundle update 就足够了 . 希望这可以帮助 .

    来自libv8 README

    Bring your own V8

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

    使用RubyGems:

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

    使用Bundler(在您的Gemfile中):

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

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

    Bring your own compiler

    您可以通过在编译之前设置CXX环境变量,或者通过在bundle配置中添加--with-cxx =选项来指定您选择的编译器:

    bundle config build.libv8 --with-cxx = clang

    编辑:

    如果 therubyracer 引发此问题,请按照rider_on_rails here的建议尝试以下操作:

    gem uninstall libv8 gem install therubyracer -v YOUR_RUBY_RACER_VERSION gem install libv8 -v YOUR_VERSION - --with-system-v8

  • 3

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

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

    我可以确认这适用于rbenv和ruby 1.9.3p448

  • 0

    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和系统库是全局的)

  • 0

    当我尝试接受的答案时,libv8将成功安装 gem install libv8 ,但 bundle install 将在libv8上失败 . 我认为 bundle install 试图安装不同版本的libv8 . 我找到了一个适合我的解决方案 .

    我需要libv8,因为therubyracer依赖它 . 为了安装它,我注意到在 gem_make.out 日志中未能安装的版本为therubyracer . ( gem_make.out 日志的路径将在失败消息中 . )在我的情况下,它是3.16.14.7 . (这个版本可能会随着时间的推移而改变,以防你从现在开始读这三年 . )然后我这样做了:

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

    这允许这个工作:

    gem install therubyracer

    这让我完成了我的 bundle install .

    这对OSX优胜美地有用 .

  • 32

    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
    
  • 0

    试试我在这个问题中总结的内容:"gem install therubyracer -v '0.10.2'" on osx mavericks not installing

    它对我有用(OS X Mavericks)

  • 0

    当我从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)宝石没有问题 .

    假设你使用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
    
  • 14

    This worked fine for me:

    尝试安装这个预编译的gem:

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

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

    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

    感谢Felix Bünemann的修复!

  • 206

    您可以尝试通过the libv8 github site.上提到的方法手动编译和安装gem .

  • -6

    在MAC-Yosemite中使用RVM环境和ruby-2.1.1版本

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

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

  • 0

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

    像魅力一样工作!

  • 6

    这对我有用 .

    用您的版本替换 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
    
  • 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

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

    最后,我发现删除libv8 gem,从rubygems获取gem文件,然后手动安装带有 --with-system-v8 标志的 .gem 文件 .

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

    感谢Gaurav Agarwal's answer带领我走正确的道路!

  • 1

    我在另一个项目中使用了Xcode的测试版并且忘记了 . 切换回 xcode-select . 就像是:

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

    从Gemfile中删除:

    gem'therubyracer',: platforms =>:ruby

相关问题