therubyracer-Gem :: Ext :: BuildError:错误:无法构建gem本机扩展


81

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

  • libv8(3.16.14.3)
  • therubyracer(0.12.1)

显然,therubyracer宝石依赖于libv8。

1)安装libv8

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

我在安装它时遇到了麻烦,但是这篇出色的文章既包含了我的错误,也提供了关于如何绕过它的解释清楚的答案。

所以我安装libv8

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

据我了解,这安装了gem,但是使用了v8库的本地系统安装,而不是... gem随附的版本?无论哪种方式,它都是成功的。

2)安装rubyracer

在下一步中,我无法安装therubyracergem。我不太确定这个gem的功能,只是我要尝试的Rails项目的依赖项bundle install

它给了我以下错误:

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

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

  • 如何检查是否确实安装了V8,如何找到它?
  • 我尝试了一些指定的标志,它们似乎都没有将gem指向正确的安装目录
  • 这可能是一个单独的主题,但这是什么extconf.rb?我已经在几个地方看到过。gcc具体来说,它与编译器有什么关系?

谢谢!!

编辑:

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

  2. 我也试过了CCCXXCPP环境变量描述在这里,虽然我不认为有,因为它已经拿起我的任何影响gcc v4.6编译器。


这个这个,也许?
dax

2
<叹>我一直在Mac上安装therubyracer时遇到麻烦=(
maerics

Answers:


166

这一步对我有用。

操作系统: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

接受此答案,但有一个更改。我切换了第3步和第2步以使其起作用-安装libv8,然后安装theruby racer。谢谢!
user2490003 2015年

谢谢,这就像一个魅力!我一定很累,但是如果您的说明中有尖锐字符而不是您的版本号,这将对您有所帮助,我需要安装其他版本,但是我只是复制您的注释。
Taylored网站,2015年

注意libv8版本是至关重要的,因为注意到这里是奇点版本(在版本的最后两位数字),包含二进制为好。
吉米·朱

在Mojave上,安装/卸载/重新安装Dance对我有用。我讨厌这个旧东西!:D
emptywalls

73

对于那些在OS X El Capitan中面临此问题的人来说,来自therubyracer问题线程的解决方案终于对我有用:

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

我之前也曾跑步brew install gcc,但是我不确定这是否确实必要。


1
我必须删除Gemfile.lock才可以正常使用。提示。
2016年

3
+1,但对于将来的读者,您将需要gem install libv8 -v 'A.B.C.D'适当的选择。撰写本文时为3.16.14.15。
戴夫·兰德

1
+1,如果您想安装therubyracer的特定版本,请使用:gem install therubyracer -v 'x.x.x' -- --with-v8-dir=/usr/local/opt/v8-315
avital

1
看起来很像jottr的答案。也许把他喊出来。
忽略

4
对我而言,v8目录为:/usr/local/opt/v8@3.15
SamuelLJohnson,

26

尝试先卸载libv8 gem,然后再安装rubyracer,然后再安装libv8

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

1
没有运气:(错误的以下几行似乎很有趣:g ++-4.6:错误:x86_64:没有这样的文件或目录g ++-4.6:错误:无法识别的选项“
-arch

1
我发现在安装libv8之前therubyracer效果更好。
克里斯·彼得斯

23

在尝试了各自github问题和此处提出的所有其他解决方案后,在github上发布的Tertom解决方案为我解决了该问题
我有完全相同的系统配置。
这是在capitan上,因此不是该问题的确切答案,但是人们可能会发现此信息有用。

我在这里引用它以提高知名度:

解决了同样的问题

  • MacOS 10.11.2
  • 红宝石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

如果您也无法安装libv8,

gem install libv8 --with-system-v8

要么

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

1
这对我有用。我发现我需要指定rubyracer期望安装的libv8 gem的版本。
Paul Sturgess

1
是的,我相信bundle config build.libv8 --with-system-v8这是我的关键。谢谢!
natebeaty

这是唯一对我有用的方法(并于2019年底在卡塔利娜州尝试)
Sam Johnson

即使不建议使用自制软件/版本,也非常有帮助。我的问题是我当前的链接已链接到“ / usr / local / bin / d8”。取消链接并运行 brew link --force v8-315对我来说很有效。2/2020-MacOS 10.15.3。-Ruby 1.9.3版-Bundler 1.16.4-libv8版本13.16.14.19
Thomas

12

对于使用macOS 10.15的所有人来说,brew均已更改,因此您需要执行以下命令。

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

6

以上答案对我不起作用;我的捆绑程序配置disable-shared-gems启用,这会导致其他问题。

我正在使用Yosemite 10.10.1,Rails 3.2.x和Ruby 1.9.3p550。

我的以下代码段bin/setup已为我解决了此问题。

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

4

我找到了解决上述问题的方法。

这更像是libv8和therubyracer之间的兼容性。

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

gem install therubyracer -v '0.10.2'

由于两个版本都与我兼容,因此应该可以正常工作。最初,我试图为therubyracer安装版本0.12.0,并且遇到了问题。切换到0.10.2版后,一切正常。

我当前的操作系统:小牛


3

我已经遇到了这个问题,MacOS Mojave 10.14.2当我发现软件包的v8-315安装位置以及文件夹名称是什么时,我能够解决此问题。就我而言,就在这里/usr/local/opt/v8@3.15

要解决此问题,我接下来运行:

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


1

尽管安装了libv8的x64(64位变体),但由于libv8依赖性,我无法在the macOS Catalina 10.15上构建therubyracer。

对我来说,解决方案是从therubyracer切换到mini_racer,安装mini_racer gem(无需本地构建),嘿!我可以继续。

尝试一下!


除非您的项目要求将LESS文件编译为CSS:/
Martin Carel

1

就我而言

MacOS:Catalina,Ruby:2.3.3使用rbenv(不是RVM),我需要therubyracer版本:0.12.3(没关系)

我尝试了所有解决方案,但对我有用的是,亲爱的请不要盲目复制粘贴解决方案(我在我的情况下是这样做的),请首先阅读,然后根据需要更改以下命令中的版本。大多数命令是常见的大多数等植物学答案,但什么工作适合我gem install therubyracer -- --with-v8-dir=$(brew --prefix v8-315),而不是gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315由于顺治之在他的评论这个答案

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)

完成,然后继续 bundle install

注意:gem安装therubyracer时,请检查正在安装哪个版本的libv8,如果它与我在第4步中提到的版本不同,则您的therubyracer可能不会安装,因此只需做一件事,gem uninstall libv8然后通过更改重复步骤4版本,安装rubyracer时您可以在控制台中看到的内容


1

这对我有用:

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'

对于最后一条命令,检查brew --prefix v8-315我的输出是/usr/local/opt/v8@3.15


-2

我注意到当我们遇到问题时:

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

然后,您应该安装build-essential

sudo apt install build-essential

对于mini_race的安装问题,它对我有用。


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.