Impossible d'installer gem - Échec de la construction de l'extension native de gem - impossible de charger un tel fichier - mkmf (LoadError)

172

Rubis 1.9.3

Le rôle de Gemfile

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

Lorsque j'essaye d'installer des gemmes, j'obtiens une erreur

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.

Alors je fais ça

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

et obtenir une erreur aussi.

Qu'est-ce que j'ai raté?

Alexandre
la source

Réponses:

428

Il y a des questions similaires:

Habituellement, la solution est:

sudo apt-get install ruby-dev

Ou, si cela ne fonctionne pas, en fonction de votre version ruby , exécutez quelque chose comme:

sudo apt-get install ruby1.9.1-dev

Devrait résoudre votre problème.


Ne fonctionne toujours pas? Essayez ce qui suit après avoir installé ruby-dev:

sudo apt-get install make

MrYoshiji
la source
Mais je n'ai que 1.9.3 rubis.
Alexandre
5
ruby 1.9.3 est un alias de ruby ​​1.9.1
6
Après l'installation, ruby1.9.1-devje devais aussi sudo apt-get install make. Je vous remercie!
wasatchwizard
6
Si vous avez installé votre ruby ​​avec la commande sudo apt-get install ruby(sans spécifier la version), vous n'avez pas à vous soucier trop de votre version si vous venez de l'installersudo apt-get install ruby-dev
kellins
7
J'ai trouvé que sur Ubuntu 16.04, vous avez également besoin desudo apt-get install gcc make
Treur
13

Pour WSL (sous-système Windows pour Linux), vous avez besoin du build-essentialpackage d' installation :

sudo apt install build-essential
Dmitry S.
la source
1
Résolu pour moi après qu'aucune des autres suggestions ne semblait le faire. Ma configuration: Win10 Pro + WSL avec Ubuntu 18.04 + Ruby 2.5. Merci!
cjs1978
1
Même chose pour une machine virtuelle Ubuntu Server Hyper-V.
Jorge Yanes Diez
1
A travaillé pour moi sur Ubuntu dans Docker
Miguel Mota
Cela a fonctionné pour moi sur une installation régulière d'Ubuntu 18.04 LTS lors de la tentative d'installation de Typhoeus. Il a fallu des siècles pour y arriver, merci!
RemakingEden le
8

J'ai eu le même problème en essayant d'installer jquery-rails. Le correctif était

sudo apt-get install zlibc zlib1g zlib1g-dev
B2Pi
la source
1
Le simple fait d'installer zlib1g-devvous donnera ce dont vous avez besoin ici, ou du moins cela l'a fait pour moi.
lindes
4

J'ai trouvé que j'avais besoin d'installer une autre version de ruby. Donc exécuter la commande

$ sudo apt-get install ruby1.9.1-dev

puis essayez d'installer l'extension

Si vous rencontrez des problèmes où il vous dit que vous n'avez pas g ++, vous pouvez exécuter la commande suivante pour l'installer

$ sudo apt-get install g++
hmjha
la source
4

Je viens de terminer une chasse à l'oie sauvage de 2 heures pour essayer de résoudre ce problème. Aucune des réponses affichées n'a fonctionné pour moi. Je suis sur un Mac (Mojave version 10.14.6, Xcode version 11.3).

Il s'avère que les en-têtes de fichier ruby ​​manquaient, alors j'ai dû courir open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Cela n'a pas fonctionné pour moi au début parce que la version de CommandLineTools que j'avais installée n'avait pas le dossier «Packages». J'ai donc désinstallé et réinstallé comme ceci:

rm -rf /Library/Developer/CommandLineTools

xcode-select --install

Ensuite, j'ai exécuté à nouveau la commande précédente:

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

Après l'installation, l'erreur a été corrigée!

Jérôme
la source
Cela a fonctionné pour moi. Je suis sous macOS 10.14.6 (18G1012). Xcode 11.3.
palmi
Merci. Votre solution a fonctionné pour moi lors de l'installation de "sudo gem install cocoapods" pour le développement de flutter.
Venkataraman K
3

Au cas où quelqu'un à l'avenir aurait ce problème, j'utilise un Mac et je devais simplement installer les outils de ligne de commande en utilisant 'xcode-select --install'

NateW
la source
1
Cela a fonctionné pour moi. Dans mon cas, je me grattais la tête parce que ma construction fonctionnait bien jusqu'à ce que je passe à El Capitan.
bruce1337
2
  1. Assurez-vous que ruby-devest installé
  2. Assurez-vous que makeest installé
  3. Si vous obtenez toujours l'erreur, recherchez les packages suggérés. Si vous essayez d'installer quelque chose comme gem install pgvous devrez également installer la lib libpq-dev( sudo apt-get install libpq-dev).
Hazmat
la source
1

Cela permet également de s'assurer que libmysqlclient-dev est installé (Ubuntu 14.04)

KLaw
la source
1

Cela a fonctionné pour moi. bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)"

Mohammed
la source
0

Sous Mac, cela fonctionne pour moi:

CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.2
rubyu2
la source
0

Après quelques recherches pour une solution, il s'avère que le paquet -dev est nécessaire, pas seulement ruby1.8. Donc, si vous avez ruby1.9.1 faire

sudo apt-get install ruby1.9.1-dev

ou pour installer la version générique de ruby, utilisez (selon le commentaire @lamplightdev):

sudo apt-get install ruby-dev

devrait le réparer.

Essayez de localiser mkmf pour voir si le fichier est réellement là.

Rahi.Shah
la source