我正在尝试安装 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
这是因为 OS X 10.9+ 使用的是 4.8 版的 GCC。如拉取请求 (https://github.com/cowboyd/libv8/pull/95) 中所述,旧版本的 libv8 不正式支持此功能。请尝试在您的 Gemfile(或)bundle update
中增加 libv8 的版本就足够了。希望这可以帮助。
来自 libv8 README
带上你自己的 V8
因为 libv8 是 rubyracer 使用的 V8 引擎的接口,所以您可能需要使用 libv8,即使您已经安装了 V8。如果您希望使用自己的 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 here 的建议尝试以下操作:
gem 卸载 libv8 gem install therubyracer -v YOUR_RUBY_RACER_VERSION gem install libv8 -v YOUR_VERSION -- --with-system-v8
您实际上可以在 Mavericks 上安装该版本:
gem install libv8 -v 3.11.8.17 -- --with-system-v8
我可以确认这适用于 rbenv 和 ruby 1.9.3p448
gem install libv8 -- --with-system-v8
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
的那个)
您可能还需要以超级用户身份运行上述命令(如果您的 gems 和系统库是全局的)
您可以配置捆绑程序,而不必知道每个版本。 @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
v8@3.15
和 v8
我的问题是从 therubyracer
更新到 macOS 10.15
和 ruby-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
当我尝试接受的答案时,libv8 将使用 gem install libv8
成功安装,但 bundle install
在 libv8 上会失败。我认为 bundle install
试图安装不同版本的 libv8。我能够找到适合我的解决方案。
我需要 libv8,因为 rubyracer 依赖于它。为了安装它,我在 therubyracer 的 gem_make.out
日志中记录了安装失败的版本。 (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 上对我有用。
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
我更新到 macOS Catalina @ 10.15 和 ruby 2.6.5
。过了一会儿,再次安装 libv8
和 therubyracer
,虽然我建议不要更新 macOS(我听说 ruby
应该没问题)。
首先,我必须更新 XCode
xcode-选择--安装
我使用 rbenv
更新 ruby
,并将 /Users/<username>/.rbenv/version
中的 ruby
版本手动设置为 2.6.5
。尽管如果您的项目包含 .ruby-version
文件,这无关紧要。
然后我清理了从 libv8
安装的任何版本(通常在 /usr/local/opt/
中):brew uninstall v8
、brew uninstall libv8@3.15
酿造安装 v8@3.15
现在,在 https://github.com/cowboyd/libv8#do-i-get-a-binary 之后,我安装了
gem install libv8 -v '3.16.14.19' -- --with-system-v8
然后可以运行 bundle install
而不会出错。
这些都没有帮助我......无论我做了什么,我的 therubyracer gem install 一直抱怨这个错误:
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
我希望其他人觉得这很有用!
试试我在这个问题中总结的内容:"gem install therubyracer -v '0.10.2'" on osx mavericks not installing
它对我有用(OS X Mavericks)
当我从 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) gems 安装没有问题。
假设您使用 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
这对我来说很好:
尝试安装这个预编译的 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
感谢 Felix Bünemann 的修复!
我尝试了先前答案中概述的许多解决方案,但发现运行 bundle(以安装其他缺少的 gem)会尝试重新编译 libv8(尽管已经使用 --with-system-v8
成功安装了它)并因此遇到同样的问题.
最终,我发现删除 libv8 gem,从 rubygems 获取 gem 文件,然后手动安装带有 --with-system-v8
标志的 .gem
文件对我有用。
IE
gem uninstall libv8
gem fetch libv8 -v LIBV8_VERSION
gem install libv8-LIBV_VERSION.gem -- --with-system-v8
bundle
感谢 Gaurav Agarwal's answer 引导我走上正确的道路!
在带有 RVM 环境和 ruby-2.1.1 版本的 MAC-Yosemite 中
gem install libv8 -v 3.16.14.3 -- --with-v8-lib gem install therubyracer
它在上述命令的帮助下工作,可以确认这一点。
真正对我有用的是将 ruby 升级到 2.2.0,删除 Gemfile.lock 并重新捆绑。
像魅力一样工作!
这对我有用。
将 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
我在 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
我在另一个项目中使用了 Xcode 的 beta 版本并且忘记了。使用 xcode-select
切换回来。就像是:
sudo xcode-select --switch /Applications/Xcode.app/
从 Gemfile 中删除:
gem 'therubyracer', :platforms => :ruby
--with-system-v8
成功!bundle config build.libv8 --with-system-v8
有帮助!bundle update
将我从麻木和苹果升级造成的痛苦中拯救出来therubyracer
gem 的以下问题:stackoverflow.com/questions/23536893/…