Não foi possível instalar o gem - Falha ao construir a extensão nativa do gem - não é possível carregar esse arquivo - mkmf (LoadError)

172

Ruby 1.9.3

A parte do Gemfile

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

Quando estou tentando instalar gemas, recebo um erro

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.

Então eu estou fazendo isso

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

e recebendo um erro também.

Do que eu senti falta?

Alexandre
fonte

Respostas:

428

Existem perguntas semelhantes:

Geralmente, a solução é:

sudo apt-get instala ruby-dev

Ou, se isso não funcionar, dependendo da sua versão do ruby , execute algo como:

sudo apt-get install ruby1.9.1-dev

Deve corrigir seu problema.


Ainda não funciona? Tente o seguinte depois de instalar o ruby-dev:

sudo apt-get install make

MrYoshiji
fonte
Mas eu tenho apenas 1.9.3 ruby.
1174 Alexandre
5
O ruby ​​1.9.3 é um alias do ruby ​​1.9.1 #
6
Depois de instalar ruby1.9.1-deveu tive que também sudo apt-get install make. Obrigado!
wasatchwizard
6
Se você tiver instalado o ruby com o comando sudo apt-get install ruby(sem especificar a versão), então você não precisa se preocupar com a sua versão muito se você acabou de instalarsudo apt-get install ruby-dev
kellins
7
Descobri que no Ubuntu 16.04 você também precisasudo apt-get install gcc make
Treur
13

Para o WSL (Windows Subsystem for Linux), você precisa instalar o build-essentialpacote:

sudo apt install build-essential
Dmitry S.
fonte
1
Resolvi isso para mim depois que nenhuma das outras sugestões pareceu fazê-lo. Minha configuração: Win10 Pro + WSL com Ubuntu 18.04 + Ruby 2.5. Obrigado!
precisa saber é o seguinte
1
A mesma coisa para uma VM do Ubuntu Server Hyper-V.
Jorge Yanes Diez
1
Trabalhou para mim no Ubuntu no Docker
Miguel Mota
Isso funcionou para mim em uma instalação regular do Ubuntu 18.04 LTS ao tentar instalar o Typhoeus. Levou idades para chegar lá, obrigado!
RemakingEden 5/04
8

Eu tive o mesmo problema ao tentar instalar o jquery-rails. A correção foi

sudo apt-get install zlibc zlib1g zlib1g-dev
B2Pi
fonte
1
Basta instalar zlib1g-devo que você precisa aqui, ou pelo menos para mim.
Lindes 03/07/19
4

Eu descobri que precisava instalar outra versão do ruby. Então, executando o comando

$ sudo apt-get install ruby1.9.1-dev

e tente instalar a extensão

Se você tiver problemas nos quais está informando que não possui o g ++, execute o seguinte comando para instalá-lo

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

Acabei de terminar uma perseguição de ganso selvagem de 2 horas tentando resolver isso. Nenhuma das respostas postadas funcionou para mim. Estou em um Mac (Mojave versão 10.14.6, Xcode versão 11.3).

Acontece que os cabeçalhos de arquivo ruby ​​estavam faltando, então eu tive que executar open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Isso não funcionou para mim no começo, porque a versão do CommandLineTools que eu havia instalado não tinha a pasta "Pacotes". Então eu desinstalei e reinstalei assim:

rm -rf /Library/Developer/CommandLineTools

xcode-select --install

Em seguida, executei o comando anterior novamente:

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

Após a instalação, o erro foi corrigido!

Jerome
fonte
Isso funcionou para mim. Estou no macOS 10.14.6 (18G1012). Xcode 11.3.
palmi 6/01
Obrigado. Sua solução funcionou para mim ao instalar o "sudo gem install cocoapods" para o desenvolvimento do flutter.
Venkataraman K
3

Caso alguém no futuro tenha esse problema, estou usando um Mac e só precisei instalar as Ferramentas de Linha de Comando usando 'xcode-select --install'

NateW
fonte
1
Isso funcionou para mim. No meu caso, eu estava coçando a cabeça porque minha compilação estava funcionando bem até que eu atualizei para El Capitan.
precisa saber é o seguinte
2
  1. Verifique se ruby-devestá instalado
  2. Verifique se makeestá instalado
  3. Se você ainda receber o erro, procure pacotes sugeridos. Se você está tentando instalar algo como gem install pgvocê também precisará instalar a lib libpq-dev( sudo apt-get install libpq-dev).
hazmat
fonte
1

Também ajuda a garantir que o libmysqlclient-dev esteja instalado (Ubuntu 14.04)

KLaw
fonte
1

Isso funcionou para mim. bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)"

Mohammed
fonte
0

No Mac, para mim, isso funciona:

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

Após alguma pesquisa por uma solução, o pacote -dev é necessário, não apenas o ruby1.8. Então, se você tem o ruby1.9.1 fazendo

sudo apt-get install ruby1.9.1-dev

ou para instalar a versão genérica do ruby, use (como no comentário @lamplightdev):

sudo apt-get install ruby-dev

deve consertá-lo.

Tente localizar o mkmf para ver se o arquivo está realmente lá.

Rahi.Shah
fonte