Therubyracer-Gem: : Ext: : BuildError: ERROR: 未能构建 Gem 本机扩展

我试图在 Mavericks 上安装以下 gem 版本

  • Libv8(3.16.14.3)
  • 赛车(0.12.1)

很明显 therubyracer gem 依赖于 libv8。

1)安装 libv8

什么是 libv8? 我的一点研究似乎表明它是某种由 Google Chrome 使用的 javascript 库?

我有麻烦安装它,但 这个伟大的职位有我的错误和一个很好的解释了如何绕过它的答案。

所以我安装了 libv8

gem install libv8 -- --with-system-v8

我的理解是,这个版本安装了 gem 但是使用了我的本地系统安装的 v8库,而不是... gem 附带的版本?不管怎样,都很成功。

2)安装赛车

在下一步中,我在安装 therubyracer gem 时遇到了麻烦。我不太确定这个 gem 是做什么的,只知道它是我正在尝试 bundle install的 Railsproject 的一个依赖项。

它给了我以下错误:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.


/Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby extconf.rb
checking for main() in -lpthread... yes
checking for main() in -lobjc... yes
checking for v8.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.


Provided configuration options:
--with-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/jeeves.butler/.rvm/rubies/ruby-1.9.2-p290/bin/ruby
--with-pthreadlib
--without-pthreadlib
--with-objclib
--without-objclib
--enable-debug
--disable-debug
--with-v8-dir
--without-v8-dir
--with-v8-include
--without-v8-include=${v8-dir}/include
--with-v8-lib
--without-v8-lib=${v8-dir}/lib
/Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/ext/libv8/location.rb:50:in
'configure': You have chosen to use the version of V8 found
on your system (Libv8::Location::System::NotFoundError)
and *not* the one that is bundled with the libv8 rubygem. However,
it could not be located. please make sure you have a version of
v8 that is compatible with 3.16.14.3 installed. You may
need to special --with-v8-dir options if it is in a non-standard
location


thanks,
The Mgmt


from /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/libv8-3.16.14.3/lib/libv8.rb:7:in `configure_makefile'
from extconf.rb:32:in `<main>'


extconf failed, exit code 1


Gem files will remain installed in /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/gems/therubyracer-0.12.1 for inspection.
Results logged to /Users/jeeves.butler/.rvm/gems/ruby-1.9.2-p290/extensions/x86_64-darwin-13/1.9.1/therubyracer-0.12.1/gem_make.out

据我所知,我选择使用本地 V8库安装 libv8,而不是使用 libv8提供的库,但是现在无法找到本地安装。

  • 如何检查是否确实安装了 V8,如何定位它?
  • 我尝试了一些指定的标志,它们似乎都没有将 gem 指向正确的安装目录
  • 这可能是一个单独的主题,但什么是 extconf.rb?我在一些地方见过。它在特定情况下对 gcc编译器做了什么?

谢谢!

编辑:

  1. 我尝试了卸载 libv8并通过 brew install重新安装的 这个解决方案。在一些类似的问题中也提到了这一点。运气不好。

  2. 我还尝试了 CCCXXCPP环境变量,正如所描述的 给你一样,尽管我不认为这有任何效果,因为它已经开始使用我的 gcc v4.6编译器了。

51125 次浏览

Try first uninstalling libv8 gem, then install rubyracer, and then libv8

gem uninstall libv8
gem install therubyracer
gem install libv8 -- --with-system-v8

I found a workaround to the above problem.

This is more of a compatibility among libv8 and therubyracer.

gem install libv8 -v '3.3.10.4' -- --with-system-v8


gem install therubyracer -v '0.10.2'

This should work fine as both the versions are compatible with me. Initially I was trying to install the version 0.12.0 for therubyracer and was facing the issue. Once I switched to version 0.10.2, everything worked fine.

My current OS: Mavericks

This steps worked for me.

OS: Maverick Ruby: 2.1.1

gem uninstall libv8
gem install therubyracer -v '0.11.3'
gem install libv8 -v '3.11.8.13' -- --with-system-v8

The above answers did not work for me; my bundler config has disable-shared-gems enabled which causes additional issues.

I'm using Yosemite 10.10.1, Rails 3.2.x, and Ruby 1.9.3p550.

The following snippet in my bin/setup has fixed the issue for me.

if ! bundle show therubyracer; then
bundle config build.libv8 --with-system-v8
gem install --install-dir vendor/bundle libv8 -v 3.16.14.7
gem install libv8 -v 3.16.14.7
gem install --install-dir vendor/bundle therubyracer
fi

After breaking my head for almost two days this worked for me.

rvm install 2.2.2
gem install rails
bundle install

Tertom's solution posted on github solved it for me, after having tried all other solutions proposed on the respective github issue and here.
I had the exact same system configuration.
This is on el capitan, so not an exact answer to the question, but people might find this info helpful.

I'm citing it here for visibility:

Solved the same problem

  • MacOS 10.11.2
  • ruby 1.9.3
  • libv8 3.16.14.13
  • therubyracer 0.12.2

--

brew tap homebrew/versions
brew install v8-315
brew link --force v8-315
bundle install
brew unlink v8-315

If you also cannot install libv8,

gem install libv8 --with-system-v8

or

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

For those facing this problem in OS X El Capitan, this solution from a therubyracer issue thread was what finally worked for me:

brew tap homebrew/versions
brew install v8-315


gem install libv8 -v '3.16.14.13' -- --with-system-v8
gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315


bundle install

I had also run brew install gcc prior, but I'm not sure whether this was in fact necessary.

I just run bundle update, and it worked for me.

Obs.: Using Ruby 2.3.0

I noticed that when we encounter a problem:

Gem::Ext::BuildError: ERROR: Failed to build gem native extension

You should then install build-essential

sudo apt install build-essential

It works for me with mini_race's installation problems.

I've got this issue for MacOS Mojave 10.14.2 and I was able to fix this issue when I found where package v8-315 was installed and what the folder name was. In my case, it was here /usr/local/opt/v8@3.15.

To fix this, I've run next:

brew install v8-315
gem install libv8 -v '3.16.14.15' -- --with-system-v
gem install therubyracer -v '0.12.2' -- --with-system-v8 --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

I couldn't get therubyracer to build on macOS Catalina 10.15 due to the libv8 dependency, despite installing the x64 (64-bit variant) of libv8.

The solution for me, was to switch from therubyracer to mini_racer, the mini_racer gem installed (without needing to build locally) and, hey presto! I could continue.

Try it!

For all of you out there using macOS 10.15, brew has has changed so you will need to do these commands.

brew install v8@3.15
gem install libv8 -v 'YOUR_VERSION' -- --with-system-v8
gem install therubyracer -v 'YOUR_VERSION' -- --with-v8-dir=/usr/local/opt/v8@3.15
bundle install

In my Case

MacOS: Catalina, Ruby: 2.3.3, Using rbenv (not RVM), I Required therubyracer version : 0.12.3 (Does not matter)

I tried all the solution but what worked for me, Dear pls do not blindly copy paste solution (bcz I did in my case), first read and then change the versions in the below commands if you need any. Most of the commands are common in most of the exisiting answers but what worked for me gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315) instead of gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315 Thanks to Junji Zhi for his comment in this answer

1. brew install gcc
2. brew tap homebrew/versions   (If it wont work then below 2 steps, for latest MacOS version)
2.a. brew tap brewsci/bio
2.b. brew tap brewsci/science
3. brew install v8-315     (uninstall if v8 installed previously without '-315')
4. gem install libv8 -v '3.16.14.19' -- --with-system-v8   (Be careful with the libv8 version mentioned in this command, replace version number with one required)
5.a. gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315    (If it does not work then try below one, In my case below command worked)
5.b. gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315)

Done, then continue with your bundle install

Note: While gem install therubyracer, check for which version of libv8 is being installing, if it is diffrent than what i mentioned in the step 4 then, your therubyracer may not install, so just do one thing, gem uninstall libv8 then repeat step-4 by changing the version, what you can see in the console while installing therubyracer

This has worked for me:

gem install libv8 -v '3.16.14.17' -- --with-system-v8
brew install v8-315
gem install therubyracer -v '0.12.3' --source 'http://rubygems.org/' -- --with-v8-dir='/usr/local/opt/v8@3.15'

For the last command check the output of brew --prefix v8-315 in my case it was /usr/local/opt/v8@3.15.

The commands below solved it for me in Catalina with bundler

$ 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