如何解决LoadError:无法加载这样的文件 – ffi_c

我想知道如何解决在安装了Ruby 2.2.1 Windows安装程序Ruby gem 2.4.6之后,在控制台上执行require命令时看到的下一个错误。

 LoadError: cannot load such file -- ffi_c from C:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_req uire.rb:54:in `require' 

这是像DLL的东西?

如果您阅读ffi的需求文档,您可以看到:

你需要一个健全的建筑环境来编译扩展。 至少,您将需要:

  • AC编译器(例如OSX上的Xcode,其他所有的gcc)
  • libffi开发库 – 这通常在libffi-dev或libffi-devel中

这意味着gem不是预编译的,安装时必须编译代码。 这又意味着如果您在PC上运行,则需要安装用于Windows的Ruby开发工具包,也就是' devkit ',您可以从rubyinstaller站点上的下载页面

首先下载并安装devkit,然后打开一个新的命令行窗口,然后是:

 gem install ffi 

有关详细信息,请参阅此: https : //stackoverflow.com/a/7988119/3035830

我认为ffi的正则表达式在C:\ Ruby22-x64 \ lib \ ruby​​ \ gems \ 2.2.0 \ gems \ ffi-1.9.8-x64-mingw32 \ lib \ ffi.rb中存在一个小错误,这使得它错误地思考你正在运行ruby 2.1.x

它测试RUBY_VERSION =〜/2.1/,它捕获“2.2.1”,而它应该测试RUBY_VERSION =〜/^2.1/,其中的起始行字符为。

它应该是:

 if RUBY_VERSION =~ /^1\.8/ require '1.8/ffi_c' elsif RUBY_VERSION =~ /^1\.9/ require '1.9/ffi_c' elsif RUBY_VERSION =~ /^2\.0/ require '2.0/ffi_c' elsif RUBY_VERSION =~ /^2\.1/ require '2.1/ffi_c' elsif RUBY_VERSION =~ /^2\.2/ require '2.2/ffi_c' else require 'ffi_c' end 

我看到它已经被修复了https://github.com/ffi/ffi/commit/4168ef3dbd56a7b52978efb2ff7d0dc448f8f8f1