Невозможно установить gem - Не удалось создать собственное расширение gem - Не удается загрузить такой файл - mkmf (LoadError)

172

Ruby 1.9.3

Часть Gemfile

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

Когда я пытаюсь установить гем, я получаю сообщение об ошибке

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

и получить ошибку, а также.

Что я пропустил?

Александр
источник

Ответы:

428

Есть похожие вопросы:

Обычно решение состоит в следующем:

sudo apt-get установить ruby-dev

Или, если это не сработает, в зависимости от вашей версии ruby , запустите что-то вроде:

sudo apt-get установить ruby1.9.1-dev

Должен исправить вашу проблему.


Все еще не работает? Попробуйте следующее после установки ruby-dev:

sudo apt-get install make

MrYoshiji
источник
Но у меня только 1.9.3 рубин.
Александр
5
ruby 1.9.3 - псевдоним ruby ​​1.9.1
6
После установки ruby1.9.1-devмне тоже пришлось sudo apt-get install make. Спасибо!
wasatchwizard
6
Если вы установили свой ruby ​​с помощью команды sudo apt-get install ruby(без указания версии), вам не нужно слишком беспокоиться о своей версии, если вы просто устанавливаетеsudo apt-get install ruby-dev
kellins
7
Я обнаружил, что на Ubuntu 16.04 вам тоже нужноsudo apt-get install gcc make
Treur
13

Для WSL (подсистема Windows для Linux) вам необходимо установить build-essentialпакет:

sudo apt install build-essential
Дмитрий Сергеевич
источник
1
Решил это для меня после того, как ни одно из других предложений, казалось, не сделало это. Моя настройка: Win10 Pro + WSL с Ubuntu 18.04 + Ruby 2.5. Спасибо!
cjs1978,
1
То же самое для виртуальной машины Ubuntu Server Hyper-V.
Хорхе Янес Диез
1
Я работал в Ubuntu в Docker
Мигель Мота
У меня это работало на обычной установке Ubuntu 18.04 LTS при попытке установить Typhoeus. Потребовалось много времени, чтобы попасть туда, спасибо!
RemakingEden
8

У меня была такая же проблема при попытке установить jquery-rails. Исправление было

sudo apt-get install zlibc zlib1g zlib1g-dev
B2Pi
источник
1
Просто установка zlib1g-devдаст вам то, что вам нужно здесь, или, по крайней мере, для меня.
Линдес
4

Я обнаружил, что мне нужно установить другую версию ruby. Так работает команда

$ sudo apt-get install ruby1.9.1-dev

а затем попытайтесь установить расширение

Если вы сталкиваетесь с проблемами, когда вам говорят, что у вас нет g ++, вы можете запустить следующую команду, чтобы установить его

$ sudo apt-get install g++
hmjha
источник
4

Только что закончил двухчасовую погоню за диким гусем, пытаясь решить эту проблему. Ни один из опубликованных ответов не работал для меня. Я на 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.
Пальми
Спасибо. Ваше решение помогло мне при установке "sudo gem install cocoapods" для разработки флаттера.
Венкатараман К
3

В случае, если у кого-то в будущем возникла эта проблема, я использую Mac и просто должен был установить инструменты командной строки, используя 'xcode-select --install'

NateW
источник
1
Это сработало для меня. В моем случае я чесал голову, потому что моя сборка работала нормально, пока я не обновился до El Capitan.
bruce1337
2
  1. Убедитесь, что ruby-devустановлено
  2. Убедитесь, что makeустановлено
  3. Если вы все еще получаете ошибку, ищите предложенные пакеты. Если вы пытаетесь установить что-то подобное, gem install pgвам также нужно установить lib libpq-dev( sudo apt-get install libpq-dev).
HazMat
источник
1

Это также помогает убедиться, что libmysqlclient-dev установлен (Ubuntu 14.04)

Клоу
источник
1

Это сработало для меня. bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)"

Мухаммед
источник
0

В Mac для меня это работает:

CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.2
rubyu2
источник
0

После некоторого поиска решения выясняется, что нужен пакет -dev, а не просто ruby1.8. Так что если у вас есть ruby1.9.1 делать

sudo apt-get install ruby1.9.1-dev

или чтобы установить общую версию ruby, используйте (согласно комментарию @lamplightdev):

sudo apt-get install ruby-dev

должен это исправить.

Попробуйте найти mkmf, чтобы увидеть, есть ли файл там.

Rahi.Shah
источник