`require': 没有要加载的文件 -- mkmf (LoadError)

Posted

技术标签:

【中文标题】`require\': 没有要加载的文件 -- mkmf (LoadError)【英文标题】:`require': no such file to load -- mkmf (LoadError)`require': 没有要加载的文件 -- mkmf (LoadError) 【发布时间】:2011-11-30 13:09:50 【问题描述】:

我正在尝试使用 ruby​​1.9.1 在 Ubuntu Natty Narwhal 11.04 上安装 rails。

我使用包含开发包的apt-get install ruby1.9.1-full 安装了 ruby​​。我用谷歌搜索了这个错误,所有人都建议我安装我已经拥有的 1.9.1-dev。

Building native extensions.  This could take a while...
ERROR:  Error installing rails:
    ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.8 extconf.rb
extconf.rb:36:in `require': no such file to load -- mkmf (LoadError)
    from extconf.rb:36


Gem files will remain installed in /usr/lib/ruby/gems/1.8/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /usr/lib/ruby/gems/1.8/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out

【问题讨论】:

我在尝试安装 watir-webdriver 时遇到了并行错误。它也通过安装 ruby​​1.0.1-dev 得到纠正 Rails installation failed on Ubuntu with "cannot load such file -- mkmf" 的可能重复项 【参考方案1】:

你试过了吗:

sudo apt-get install ruby1.8-dev

【讨论】:

我用的是1.9.1,为什么要安装ruby1.8-dev? 这真是太奇怪了,我安装了 1.9.1 但它读取 1.8,当我运行 ruby​​ -v 我得到: ruby​​ 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] 您已将 ruby​​ 1.8 设置为系统上的默认 ruby​​【参考方案2】:

在寻找解决方案后发现需要-dev 包,而不仅仅是ruby1.8。所以如果你有ruby1.9.1 在做

sudo apt-get install ruby1.9.1-dev

或安装通用 ruby​​ 版本,使用(根据@lamplightdev 评论):

sudo apt-get install ruby-dev

应该修复它。

尝试locate mkmf 以查看该文件是否确实存在。

【讨论】:

以下将安装与您当前安装的 ruby​​ 版本匹配的开发包:sudo apt-get install ruby​​-dev 是的,为我工作。如果您只想安装当前的 ruby​​ 版本,请运行 ruby​​ -v 查找版本。 @lamplightdev 对我没用,ruby 版本是 1.9.3,它正在安装 1.8 如果我尝试安装 ruby​​-dev 我已经安装了ruby-all-dev,它可能适用于所有版本。 这对于 aws-sdk 也是必需的,因为 AWS 已弃用 SOAP。如果利益相关者反对生产构建中的任何东西-dev,则令人担忧。 (SDK 也不会让他们兴奋)。【参考方案3】:

您可以使用 RVM(Ruby 版本管理器),它有助于管理您机器上的所有 ruby​​ 版本,这对您的开发非常有帮助(从不稳定版本迁移到稳定版本时)

或者对于 Linux (ubuntu) 去 sudo apt-get install ruby1.8-dev

然后sudo gem install rails 验证它是否执行rails -v 它会在rails 上显示版本

之后,您可以安装捆绑包(开发所需的 gem)

【讨论】:

你仍然可以在 linux 上使用 RVM。我正在这样做(但在安装 rails 时仍然存在这个 mkmf 错误的问题)【参考方案4】:

这是对我有用的答案。在上面的 cmets 中,但应该作为 ubuntu 12.04 ruby​​ 1.8.7 的答案而获得应有的位置

sudo apt-get install ruby-dev
# if above doesnt work make sure you have build essential
sudo apt-get install build-essential

【讨论】:

另外值得注意的是,如果你想使用 ubuntu 软件中心,有一个 ruby​​-dev 插件,你可以选择“用于编译扩展模块的头文件”。 在我看到评论或这个答案之前,我使用了 sudo apt-get install ruby1.9.1-dev 和 ruby​​ 1.9.3,这让我能够构建 rails 扩展。不确定这样的不匹配版本是否会在以后让我感到头疼,但应该注意的是,使用官方接受的答案的轻微改动来正确安装导轨。 如果你有 RVM 怎么办?那你不是已经有你需要的 ruby​​ 版本了吗?【参考方案5】:

我还需要安装 build-essential:

sudo apt-get install build-essential

【讨论】:

这张票就在这里.. 我想我还必须安装 ruby​​-dev 但是直到我安装了 build-essential 之后它才起作用。一百万谢谢【参考方案6】:

问题在 Ubuntu 13/04/13.10/14.04 上仍然是递归的

sudo apt-get install ruby1.9.1-dev

对我来说很好。因此,如果您使用的是 Ubuntu 13.04/13.10/14.04,那么使用它真的会派上用场。

即使 ruby​​ 版本是 1.9.3,这也有效。这是因为 Repository 中没有 ruby​​1.9.3-dev 可用...

【讨论】:

是的,这个在 ruby​​1.9.3 上也对我有用。 ubuntu 存储库中没有 ruby​​1.9.3-dev 的包。 不再...在使用 --ruby 从 rvm.io 安装 rvm 后工作 - 并且可能最好在之前 apt-get remove ruby​​【参考方案7】:

我觉得有点晚了,但是

sudo yum install -y gcc ruby-devel libxml2 libxml2-devel libxslt libxslt-devel

在 Fedora 上为我工作。

http://nokogiri.org/tutorials/installing_nokogiri.html

【讨论】:

【参考方案8】:

我在安装 bundle 时遇到了类似的错误

sudo apt-get install ruby-dev

非常适合我并解决问题 薄荷 16 ruby​​1.9.3

【讨论】:

【参考方案9】:

您拥有 Ruby 1.8,因此您需要至少升级到 1.9 才能使其正常工作。

如果是,请检查How to install a specific version of a ruby gem?

如果这没有帮助,请重新安装ruby-dev

【讨论】:

【参考方案10】:

Ruby 版本:2.7.1 宝石版本:3.1.3

您需要检查无法安装的扩展,并找出原因。

阅读下安装错误中显示的mkmf.log文件“要查看此扩展无法编译的原因,请查看可在此处找到的mkmf.log” ,可能缺少一个库(有时是 iconv ),您必须安装它。

您也可以使用包管理器(apt、yum、pacman...)搜索扩展。

(个人案例)Arch Linux->nokogiri

gem install rails

给我看了:

要查看此扩展无法编译的原因,请查看 mkmf.log 可以在这里找到: /home/user/.gem/ruby/2.7.0/extensions/x86_64-linux/2.7.0/nokogiri-1.10.9/mkmf.log

转至:https://aur.archlinux.org/packages/ruby-nokogiri/

    确保您已安装所有依赖项 确保您已安装 make git clone包裹 cd打包 makepkg包裹

希望能提供帮助!

【讨论】:

以上是关于`require': 没有要加载的文件 -- mkmf (LoadError)的主要内容,如果未能解决你的问题,请参考以下文章

在“要求”中:没有要加载的文件 -- active_record (LoadError)

运行filezilla时出现queue.sqlite3加载传输队列时发生错误怎么办

Android.mk官方说明 中文翻译

模块化加载require.js

如何自动设好 Android.mk 的 LOCAL

php自动加载类文件探讨,spl_autoload_register自动加载原理