无法安装gem - 构建原生扩展失败 - 无法加载文件-- mkmf (LoadError)

207

Ruby 1.9.3

Gemfile 的一部分

#...............
gem "pony"
gem "bcrypt-ruby", :require => "bcrypt"
gem "nokogiri" 
#..................

当我试图安装gems时,我遇到了一个错误。

alex@ubuntu:~/$ bundle
Fetching gem metadata from http://rubygems.org/.........
Fetching gem metadata from http://rubygems.org/..
Enter your password to install the bundled RubyGems to your system: 
#####............................................................
Installing bcrypt-ruby (3.0.1) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb 
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from extconf.rb:36:in `<main>'


Gem files will remain installed in /home/alex/.bundler/tmp/5526/gems/bcrypt-ruby-3.0.1 for inspection.
Results logged to /home/alex/.bundler/tmp/5526/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
An error occurred while installing bcrypt-ruby (3.0.1), and Bundler cannot continue.
Make sure that `gem install bcrypt-ruby -v '3.0.1'` succeeds before bundling.

那我就这么做

sudo gem install bcrypt-ruby -v '3.0.1'
Building native extensions.  This could take a while...
ERROR:  Error installing bcrypt-ruby:
        ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- mkmf (LoadError)
        from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
        from extconf.rb:36:in `<main>'


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

同时还出现了错误。

我错过了什么?


1
可能是重复的问题:`require': no such file to load -- mkmf (LoadError) - guest
对于 macOS,这也可能会有所帮助:https://dev59.com/UmEi5IYBdhLWcg3wyO44 - Priyanshu Jain
17个回答

469

5
Ruby 1.9.3 是 Ruby 1.9.1 的别名。 - user2177443
6
安装了 ruby1.9.1-dev 后,我还需要运行 sudo apt-get install make。谢谢! - kodybrown
8
如果你使用命令 sudo apt-get install ruby 安装了 Ruby(没有指定版本),那么如果你只是安装了 sudo apt-get install ruby-dev,就不需要过多担心你的版本问题。 - kellins
对我有用,谢谢。但是我最终还是以sudo身份运行了bundle install。 - jerome
7
我发现在Ubuntu 16.04上,你还需要安装sudo apt-get install gcc make - Treur
显示剩余4条评论

28

对于WSL(Windows子系统Linux),您需要安装build-essential软件包:

sudo apt install build-essential

1
在其他建议似乎都没有解决的情况下,这个解决方案帮我解决了问题。我的环境设置为:Win10专业版+带有Ubuntu 18.04的WSL+Ruby 2.5。谢谢! - cjs1978
1
Ubuntu Server Hyper-V虚拟机也是同样的事情。 - Jorge Yanes Diez
1
在 Docker 中的 Ubuntu 上对我有效。 - Miguel Mota
当我尝试安装Typhoeus时,在一般的Ubuntu 18.04 LTS上,这对我很有帮助。要走了很长时间才到这里,谢谢! - RemakingEden
我不是一个Ruby专家,所以对于为什么安装一个简单的gem需要这样做我感到非常困惑,但是我对这个答案表示感谢。这正是我的问题所在。 - undefined

13

对于MacOS用户:

只需按照以下步骤轻松解决问题:

brew install cocoapods

12

刚刚完成了一场长达2小时的围捕行动,试图解决这个问题。所有已发布的答案对我都没有用。我使用的是Mac(Mojave 版本10.14.6,Xcode 版本11.3)。

原来是缺少了 ruby 文件头,所以我必须运行以下命令:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

一开始这并没有起作用,因为我安装的 CommandLineTools 版本没有 "Packages" 文件夹。所以我通过以下方式进行卸载和重新安装:

rm -rf /Library/Developer/CommandLineTools

xcode-select --install

然后我再次运行之前的命令:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

安装后错误得到了修复!


这对我有用。我使用的是macOS 10.14.6(18G1012)和Xcode 11.3。 - Pouria Almassi
谢谢。您的解决方案在我安装“sudo gem install cocoapods”用于Flutter开发时起作用了。 - Venkataraman K
7
我重新安装后没有看到 'Packages/' 文件夹。 - Bright Lee

10

我在安装jquery-rails时遇到了同样的问题。解决方法是

sudo apt-get install zlibc zlib1g zlib1g-dev

1
只需安装 zlib1g-dev 就可以满足你的需求,至少对我来说是这样的。 - lindes

7

如果将来有人遇到这个问题,我使用的是 Mac,并且只需要使用“xcode-select --install”安装命令行工具即可。


1
这对我有用。在我的情况下,我一直在纠结,因为我的构建工作正常,直到我升级到El Capitan。 - bruce1337

6
我发现我需要安装另一个版本的ruby。 因此运行以下命令:
$ sudo apt-get install ruby1.9.1-dev

然后尝试安装该扩展

如果出现告诉您没有g++的问题,您可以运行以下命令进行安装

$ sudo apt-get install g++

5

我创建了一个小的hackMD,用于在MacOS 10.15(Catalina)和11(Big Sur)上安装cocoapods。

https://hackmd.io/@sBJPlhRESGqCKCqV8ZjP1A/S1UY3W7HP

在MacOS Catalina(MacOS 10.15.X)和Big Sur(MacOS 11)上安装Cocoapods

  1. 确保您已安装Xcode组件。

  2. 直接从此链接下载“命令行工具”(约500MB)(需要苹果账户) https://developer.apple.com/downloads/index.action

  3. 安装下载的文件

  4. 点击安装

  5. 在终端中安装COCOAPODS文件 sudo gem install -n /usr/local/bin cocoapods


6
这个命令 brew install cocoapods 对我很有效(假设你已经安装并更新了 Homebrew)。 - kbpontius

5
  1. 确保已安装ruby-dev
  2. 确保已安装make
  3. 如果您仍然出现错误,请查找建议的软件包。如果您尝试安装像gem install pg这样的内容,您还需要安装liblibpq-devsudo apt-get install libpq-dev)。

2
这对我有用。 bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)" 这个命令可以帮助你配置snappy的构建选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接