安装libv8时出错:错误:无法构建gem本机扩展

我做了一个Rails项目,

rails new test_bootstrap.

成功了。

移动到项目目录并添加了gem

gem "therubyracer"
gem "less-rails" #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS
gem "twitter-bootstrap-rails"

然后跑

bundle install

在那之后,我有这个错误。

Installing libv8 (3.16.14.3)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.


c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe extconf.rb
creating Makefile
지정된 경로를 찾을 수 없습니다.                                                          지정된 경로를 찾을 수
없습니다.                                                          지정된 경로를 찾을 수 없습니다.


c:/RailsInstaller/Ruby1.9.3/lib/ruby/ge
ms/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:58:in `setup_python!': libv8 requires
python 2 to be installed in order to build, but it is currently not available (RuntimeErr
or) from c:/RailsInstaller/Ruby1.9.
3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/libv8/builder.rb:42:in `block in build_lib
v8/builder.rb:42:in `block in build_libv8!'
from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `chdir'
from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/builder.rb:40:in `build_libv8!'
from c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ext/lib
v8/location.rb:24:in `install!'
from extconf.rb:7:in `<main>'




Gem files will remain installed in c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/l
ibv8-3.16.14.3 for inspection.
Results logged to c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/libv8-3.16.14.3/ex
t/libv8/gem_make.out
An error occurred while installing libv8 (3.16.14.3), and Bundler cannot
continue.
Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.

对不起一些韩国人。它说,它找不到选择的路径或类似的东西。

我试着运行这个命令

gem install libv8 -v '3.16.14.3'

抛出相同的错误。

113691 次浏览

我不认为你需要在Windows上安装therubyracer Gem.它是一个使用V8引擎的JavaScript运行时。因此,它尝试安装libv8

您可以安全地从GemFile中删除gem.

Rails乐于使用它所能找到的任何运行时。execjsnodejs等等。都是可能的选择。

Microsoft已经为Windows上的JavaScript嵌入了JScript运行时,Rails也使用它。查看更多信息

试试这个:

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

注意:,因为libv8是RubyRacer使用的V8引擎的接口。 您可能需要使用libv8,即使您已经安装了V8。如果 您希望使用自己的V8安装,而不是构建它 您可以使用“--with-system-v8 ”选项。

有关详细信息,请参阅GitHub上的libv8的文档

解决该问题的其他解决方法是在Gemfile中将它们分开。

group :production do
gem 'libv8', '~> 3.11.8.3'
gem 'therubyracer', :platform => :ruby
end

然后运行bundle命令:捆绑包安装--无生产

试着

Gem “ TherubyRacer ”,“~>0.10.2 ”到GemFile

它将安装相关的Gem libv8(3.3.1 0.4),并解决构建Gem本机扩展失败的问题。

那对我有用。把它放进你的Gemfile里。

Gem ' libv8 ','~>3.16.14.7 '

如何解决libv8/therubyracer问题

我遇到了类似的问题,在安装libv8后,安装RubyRacer时出现错误。以下是我的解决方案:

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8
   

$ bundle install

--请参阅安装RubyRacer时出错--

$ gem uninstall libv8


$ brew install v8


$ gem install therubyracer


$ bundle install

--请参阅安装libv8时出错--

$ gem install libv8 -v '3.16.14.3' -- --with-system-v8

与自制,这有助于我解决这个错误。

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

在RubyRacer GitHub上看到的问题。

对于新版本的自制程序,因为自制程序/版本已被删除:

brew install v8@3.15


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


bundle install

@Gorner的建议(谢谢)

我尝试了上面列出的解决方案命令,它看起来非常适合安装单独的gem,但对于Bundler用户-您应该使用bundle config.

使用

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

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

配置Bundler以获取安装特定gem时要使用的参数

我也无法安装这个gem,而不是使用

--with-system-v8

有一次尝试做捆绑更新,这对我来说很好。

我的问题与therubyracer完全无关,只是在ABC_1 GEM_,正如@rishav-bhardwaj_指出的那样,ABC_2没有起到作用,相反,我必须执行

bundle update

然后

bundle install

最后

Bundle complete!

错误消失了!

<代码> Gem:Ext:Builder错误:错误:无法生成Gem本机扩展。 安装libv8(3.16.14.7)时出错,Bundler无法继续。 在绑定之前,请确保`gem install libv8-V ' 3.16.14.7 '`成功。

使用以下命令解决libv83.16.14.7问题:

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

然后bundle install成功完成。

我觉得这与libv8关系不大,而与TherubyRacer关系更大。

我在Rails应用程序上运行捆绑包安装时收到了相同的错误。如果您遇到类似的情况,请尝试在包之外安装gem,如下所示:

gem install therubyracer

然后运行捆绑包安装。我希望这对你也有用。

GitHub上发现此问题

假设您已经尝试了上述步骤,通过BREW安装了V8-315和V8。

brew unlink v8
brew link --force v8-315
gem install therubyracer -v '0.12.2' -- --with-system-v8

在我的案例中,我通过要求 'mini_racer', '~> 0.2.6' 在我的Gemfile

然后捆绑安装命令起作用了。

我在使用libv8mini_racer时也遇到了问题。已解决的问题

brew install v8


bundle update libv8 mini_racer

使用最新版本的mini_racer 0.2.10libv8 7.3.492.27,效果非常好。

我在我的本地上尝试了以下命令,它工作正常:

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

2020年12月,我们在Debian 10虚拟机和本地Debian 10桌面上突然遇到了编译错误。

包在尝试编译时失败 Installing libv8 3.16.14.19 with native extensions

错误日志显示:

IOError: [Errno 2] No such file or directory: '/home/username/application/shared/bundle/ruby/2.6.0/gems/libv8-7.3.492.27.1/vendor/build/config/gclient_args.gni'
Running: gclient root
Running: gclient config --spec 'solutions = [
{
"url": "https://chromium.googlesource.com/v8/v8.git",
"managed": False,
"name": "v8",
"deps_file": "DEPS",
"custom_deps": {},
},
]
'
Running: gclient sync --with_branch_heads
Subprocess failed with return code 1.

我们检查了谷歌V8回购上的标记,发现请求的标记7.3.492.27.1似乎在Google repo上不可用:

libv8 did not install properly, expected binary v8 archive '/home/.../gyp
/libv8_snapshot.a'to exist, but it was not found
(Libv8::Location::Vendor::ArchiveNotFound)

我们唯一的解决方案是从Gemfile中完全删除therubyracer:-(

我用以下方法解决了这个问题:

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