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


172

Рубін 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 install ruby-dev

Або якщо це не працює, залежно від вашої рубінової версії , запустіть щось на кшталт:

sudo apt-get install ruby1.9.1-dev

Потрібно виправити вашу проблему.


Все ще не працює? Спробуйте виконати наступне після встановлення ruby-dev:

sudo apt-get install make


Але у мене лише 1,9,3 рубіну.
Олександр

5
ruby 1.9.3 - псевдонім ruby ​​1.9.1

6
Після установки ruby1.9.1-devя також повинен був sudo apt-get install make. Дякую!
wasatchwizard

6
Якщо ви встановили свій рубін з командою sudo apt-get install ruby(не вказуючи версію), вам не потрібно надто турбуватися про свою версію, якщо ви просто встановитеsudo apt-get install ruby-dev
kellins

7
Я виявив, що на Ubuntu 16.04 вам також потрібноsudo apt-get install gcc make
Треур

13

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

sudo apt install build-essential

1
Вирішили це для мене після того, як жодна з інших пропозицій, здавалося, це не зробила. Моя установка: Win10 Pro + WSL з Ubuntu 18.04 + Ruby 2.5. Дякую!
cjs1978

1
Те саме, що для сервера Ubuntu Hyper-V VM.
Хорхе Янес Дієс

1
Працював для мене на Ubuntu в Docker
Мігель Мота,

Це працювало для мене при регулярній установці Ubuntu 18.04 LTS при спробі встановлення Typhoeus. Потрапили століття, дякую!
RemakingEden

8

У мене була така ж проблема, що намагалася встановити jquery-rails. Виправлення було

sudo apt-get install zlibc zlib1g zlib1g-dev

1
Просто встановлення zlib1g-devдасть вам те, що вам тут потрібно, або принаймні це зробило для мене.
lindes

4

Я виявив, що мені потрібно встановити іншу версію рубіну. Отже, виконуємо команду

$ sudo apt-get install ruby1.9.1-dev

а потім спробуйте встановити розширення

Якщо ви зіткнулися з проблемами, де це говорить про те, що у вас немає g ++, ви можете запустити наступну команду, щоб встановити його

$ sudo apt-get install g++

4

Щойно закінчив 2-годинну погоню за дикими гусками, намагаючись вирішити це. Жодна з опублікованих відповідей не працювала на мене. Я на Mac (версія Mojave 10.14.6, версія Xcode 11.3).

Виявляється, заголовки файлів у рубіні були відсутні, тому мені довелося запустити open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Спочатку це не працювало для мене, оскільки у встановленій мені версії CommandLineTools не було папки "Пакети". Отже, я видалив і перевстановив так:

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.
palmi

Дякую. Ваше рішення спрацювало для мене під час встановлення "sudo gem install cocoapods" для розробки.
Венкатараман К

3

У випадку, якщо хтось у майбутньому мав цю проблему, я використовую Mac, і я просто повинен був встановити інструменти командного рядка за допомогою "xcode-select --install"


1
Це працювало для мене. У моєму випадку я чухав голову, тому що мій збір працював нормально, поки я не перейшов на Ель-Капітан.
bruce1337

2
  1. Переконайтесь ruby-dev встановлено
  2. Переконайтесь make встановлено
  3. Якщо ви все-таки отримаєте помилку, шукайте запропоновані пакети. Якщо ви намагаєтесь встановити щось подібне, gem install pgвам також знадобиться встановити lib libpq-dev( sudo apt-get install libpq-dev).

1

Це також допомагає забезпечити встановлення libmysqlclient-dev (Ubuntu 14.04)



0

У Mac для мене це працює:

CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.2

0

Після деякого пошуку рішення, виявляється, потрібен пакет -dev, а не лише ruby1.8. Тож якщо у вас є рубін1.9.1 робити

sudo apt-get install ruby1.9.1-dev

або для встановлення загальної рубінової версії використовуйте (відповідно до коментаря @lamplightdev):

sudo apt-get install ruby-dev

повинні це виправити.

Спробуйте знайти mkmf, щоб побачити, чи файл є насправді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.