No se puede instalar la gema - No se pudo construir la extensión nativa de la gema - no se puede cargar dicho archivo - mkmf (LoadError)

172

Ruby 1.9.3

La parte de Gemfile

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

Cuando intento instalar gemas, aparece un error

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.

Entonces estoy haciendo esto

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

y obteniendo un error también.

¿Qué me perdí?

Alexandre
fuente

Respuestas:

428

Hay preguntas similares:

Por lo general, la solución es:

sudo apt-get install ruby-dev

O, si eso no funciona, dependiendo de su versión de ruby , ejecute algo como:

sudo apt-get install ruby1.9.1-dev

Debería solucionar su problema.


¿Sigue sin funcionar? Pruebe lo siguiente después de instalar ruby-dev:

sudo apt-get install make

MrYoshiji
fuente
Pero solo tengo 1.9.3 rubí.
Alexandre
55
ruby 1.9.3 es un alias de ruby ​​1.9.1
66
Después de instalar ruby1.9.1-devtuve que también sudo apt-get install make. ¡Gracias!
wasatchwizard
66
Si ha instalado su ruby ​​con el comando sudo apt-get install ruby(sin especificar la versión), entonces no necesita preocuparse demasiado por su versión si solo instalasudo apt-get install ruby-dev
kellins
77
Descubrí que en Ubuntu 16.04 también necesitassudo apt-get install gcc make
Treur
13

Para WSL (Windows Subsystem for Linux) necesita el build-essentialpaquete de instalación :

sudo apt install build-essential
Dmitry S.
fuente
1
Lo resolvió por mí después de que ninguna de las otras sugerencias parecía hacerlo. Mi configuración: Win10 Pro + WSL con Ubuntu 18.04 + Ruby 2.5. ¡Gracias!
cjs1978
1
Lo mismo para una máquina virtual Ubuntu Server Hyper-V.
Jorge Yanes Diez
1
Trabajó para mí en Ubuntu dentro de Docker
Miguel Mota
Esto funcionó para mí en una instalación regular de Ubuntu 18.04 LTS al intentar instalar Typhoeus. Tomó años llegar allí, gracias!
RemakingEden
8

Tuve el mismo problema al intentar instalar jquery-rails. La solución fue

sudo apt-get install zlibc zlib1g zlib1g-dev
B2Pi
fuente
1
Solo instalar zlib1g-devle dará lo que necesita aquí, o al menos lo hizo por mí.
lindes
4

Descubrí que necesitaba instalar otra versión de ruby. Entonces ejecutando el comando

$ sudo apt-get install ruby1.9.1-dev

e intente instalar la extensión

Si tiene problemas en los que le dice que no tiene g ++, puede ejecutar el siguiente comando para instalarlo

$ sudo apt-get install g++
hmjha
fuente
4

Acabo de terminar una persecución de ganso salvaje de 2 horas tratando de resolver esto. Ninguna de las respuestas publicadas funcionó para mí. Estoy en una Mac (Mojave Versión 10.14.6, Xcode Versión 11.3).

Resulta que faltaban los encabezados del archivo ruby, así que tuve que ejecutar open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Al principio no funcionó para mí porque la versión de CommandLineTools que había instalado no tenía la carpeta "Paquetes". Así que desinstalé y reinstalé así:

rm -rf /Library/Developer/CommandLineTools

xcode-select --install

Luego ejecuté el comando anterior nuevamente:

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

Después de instalar el error fue corregido!

Jerome
fuente
Esto funcionó para mí. Estoy en macOS 10.14.6 (18G1012). Xcode 11.3.
Palmi
Gracias. Su solución funcionó para mí cuando instalé "sudo gem install cocoapods" para el desarrollo de flutter.
Venkataraman K
3

En caso de que alguien en el futuro tuviera este problema, estoy usando una Mac y solo tuve que instalar las herramientas de línea de comandos usando 'xcode-select --install'

NateW
fuente
1
Esto funcionó para mí. En mi caso, me estaba rascando la cabeza porque mi construcción funcionaba bien hasta que me actualicé a El Capitan.
bruce1337
2
  1. Asegúrate de que ruby-devesté instalado
  2. Asegúrate de que makeesté instalado
  3. Si aún recibe el error, busque los paquetes sugeridos. Si está intentando instalar algo como gem install pg, también necesitará instalar lib libpq-dev( sudo apt-get install libpq-dev).
materiales peligrosos
fuente
1

También ayuda a garantizar que libmysqlclient-dev esté instalado (Ubuntu 14.04)

KLaw
fuente
1

Esto funcionó para mí. bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)"

Mahoma
fuente
0

En Mac, para mí esto funciona:

CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.2
rubyu2
fuente
0

Después de buscar un poco la solución, resulta que se necesita el paquete -dev, no solo ruby1.8. Entonces, si tienes ruby1.9.1 haciendo

sudo apt-get install ruby1.9.1-dev

o para instalar la versión genérica de ruby, use (según el comentario de @lamplightdev):

sudo apt-get install ruby-dev

Debería arreglarlo.

Intente localizar mkmf para ver si el archivo está realmente allí.

Rahi.Shah
fuente