在OS X 10.9+上安装libv8 gem

tan*_*ben 203 gem rubygems libv8 osx-mavericks osx-yosemite

我正在尝试安装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
Run Code Online (Sandbox Code Playgroud)

Gau*_*wal 448

这是因为OS X 10.9+正在使用GCC的4.8版本.在pull请求(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中):

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

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

带上你自己的编译器

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

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

编辑:

如果出现此问题therubyracer,请按照 此处rider_on_rails的建议尝试以下操作:

gem卸载libv8

gem install therubyracer -v YOUR_RUBY_RACER_VERSION

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

  • `--with-system-v8` FTW! (33认同)
  • 谢谢!`bundle config build.libv8 --with-system-v8`有帮助! (21认同)
  • "捆绑更新"让我摆脱了麻木和苹果升级造成的痛苦 (7认同)
  • 万一有人解决这个后得到与`therubyracer`宝石以下问题:http://stackoverflow.com/questions/23536893/installing-libv8-and-therubyracer-gems-on-mavericks-with-system-v8-installation (5认同)

Oli*_*haw 213

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

gem install libv8 -v 3.11.8.17 -- --with-system-v8
Run Code Online (Sandbox Code Playgroud)

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

  • 对我来说也是一样的 - os x 10.9,rbenv和ruby-2.0.0-p247 (5认同)
  • 适用于rbenv和ruby 2.1.1 - `gem install libv8 - --with-system-v8` (5认同)
  • 按照此处的说明https://github.com/cowboyd/libv8 libv8允许您使用预先存在的V8引擎版本(http://en.wikipedia.org/wiki/V8_(JavaScript_engine))而不是自己编译一个.随着C++编译器的改变,这是小牛队的一个问题.您可以使用此处的说明自行编译libV8(http://stackoverflow.com/a/19668162/2012130) (4认同)
  • 为什么这样做?该命令的哪一部分是--with-system-v8修改,它在做什么? (3认同)

Evg*_*ova 35

El Capitan解决方案对我来说:

$ brew install v8
$ gem install libv8 -v REQUIRED_LIBV8_VERSION -- --with-system-v8
Run Code Online (Sandbox Code Playgroud)

REQUIRED_LIBV8_VERSION我在哪里3.16.14.7,但你需要检查你的捆绑中需要哪一个(这是铁路的那个4.2.5)

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

  • 您不应该使用sudo进行brew安装或gem安装.这会产生权限问题. (4认同)
  • @benDangelo,你说的是绝对正确的.即使系统有时可能需要root权限来安装软件,但在一般情况下使用sudo也是一种不好的做法.我会编辑我的回复,谢谢. (2认同)

Pet*_*ese 18

您可以配置 bundler 而不必知道每个版本。@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
Run Code Online (Sandbox Code Playgroud)

  • 适用于 macOS Catalina。谢谢你! (4认同)

Ste*_*ton 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优胜美地有用.


Ala*_*ang 11

我的问题是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
Run Code Online (Sandbox Code Playgroud)


Ste*_*nou 7

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
Run Code Online (Sandbox Code Playgroud)


chr*_*111 5

我更新到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 v8:,brew 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正常运行了。


Tom*_*pin 5

这些都没有帮助我......无论我做了什么,我安装的 therubyracer 总是抱怨这个错误:

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
Run Code Online (Sandbox Code Playgroud)

最终帮助我的是我偶然发现的另一个论坛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
Run Code Online (Sandbox Code Playgroud)

然后我必须运行这些命令:

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
Run Code Online (Sandbox Code Playgroud)

我希望其他人发现这很有用!