Nie można zainstalować gem - Nie udało się zbudować natywnego rozszerzenia gem - nie można załadować takiego pliku - mkmf (LoadError)

172

Ruby 1.9.3

Część Gemfile

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

Kiedy próbuję zainstalować klejnoty, pojawia się błąd

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.

Więc robię to

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

i również pojawia się błąd.

Co mnie ominęło?

Alexandre
źródło

Odpowiedzi:

428

Są podobne pytania:

Zwykle rozwiązaniem jest:

sudo apt-get install ruby-dev

Lub, jeśli to nie zadziała, w zależności od wersji ruby , uruchom coś takiego:

sudo apt-get install ruby1.9.1-dev

Powinien rozwiązać twój problem.


Wciąż nie działa? Po zainstalowaniu ruby-dev wypróbuj następujące rozwiązania:

sudo apt-get install make

MrYoshiji
źródło
Ale mam tylko 1.9.3 ruby.
Alexandre,
5
ruby 1.9.3 jest aliasem ruby ​​1.9.1
6
Po zainstalowaniu ruby1.9.1-devteż musiałem sudo apt-get install make. Dziękuję Ci!
wasatchwizard
6
Jeśli zainstalowałeś ruby ​​za pomocą polecenia sudo apt-get install ruby(bez określania wersji), nie musisz się zbytnio martwić o swoją wersję, jeśli tylko ją zainstalujeszsudo apt-get install ruby-dev
kellins
7
Odkryłem, że na Ubuntu 16.04 również potrzebujeszsudo apt-get install gcc make
Treur
13

W przypadku WSL (podsystem Windows dla systemu Linux) potrzebujesz build-essentialpakietu instalacyjnego :

sudo apt install build-essential
Dmitry S.
źródło
1
Rozwiązałem to dla mnie po tym, jak żadna z innych sugestii nie wydawała się skuteczna. Moja konfiguracja: Win10 Pro + WSL z Ubuntu 18.04 + Ruby 2.5. Dzięki!
cjs1978
1
To samo dotyczy maszyny wirtualnej z Ubuntu Server Hyper-V.
Jorge Yanes Diez
1
Pracował dla mnie na Ubuntu w Dockerze
Miguel Mota
To zadziałało dla mnie podczas zwykłej instalacji Ubuntu 18.04 LTS podczas próby zainstalowania Typhoeus. Dojście tam zajęło wieki, dzięki!
RemakingEden
8

Miałem ten sam problem, próbując zainstalować jquery-rails. Poprawka była

sudo apt-get install zlibc zlib1g zlib1g-dev
B2Pi
źródło
1
Sama instalacja zlib1g-devda ci to, czego potrzebujesz, a przynajmniej zrobiła to dla mnie.
Lindes,
4

Odkryłem, że muszę zainstalować inną wersję Rubiego. Więc uruchamiam polecenie

$ sudo apt-get install ruby1.9.1-dev

a następnie spróbuj zainstalować rozszerzenie

Jeśli napotkasz problemy, w których mówi ci, że nie masz g ++, możesz uruchomić następujące polecenie, aby je zainstalować

$ sudo apt-get install g++
hmjha
źródło
4

Właśnie skończyłem dwugodzinną pogoń za dziką gęsią, próbując rozwiązać ten problem. Żadna z opublikowanych odpowiedzi nie działała dla mnie. Jestem na komputerze Mac (Mojave wersja 10.14.6, Xcode wersja 11.3).

Okazuje się, że brakowało nagłówków pliku ruby, więc musiałem uruchomić open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Na początku to nie zadziałało, ponieważ wersja CommandLineTools, którą zainstalowałem, nie miała folderu „Pakiety”. Więc odinstalowałem i ponownie zainstalowałem w ten sposób:

rm -rf /Library/Developer/CommandLineTools

xcode-select --install

Następnie ponownie uruchomiłem poprzednie polecenie:

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

Po instalacji błąd został naprawiony!

Jerome
źródło
To zadziałało dla mnie. Jestem na macOS 10.14.6 (18G1012). Xcode 11.3.
palmi
Dzięki. Wasze rozwiązanie zadziałało podczas instalowania „sudo gem install cocoapods” dla rozwoju flutter.
Venkataraman K
3

Na wypadek, gdyby ktoś w przyszłości miał ten problem, używam komputera Mac i po prostu musiałem zainstalować narzędzia wiersza poleceń za pomocą polecenia „xcode-select --install”

NateW
źródło
1
To zadziałało dla mnie. W moim przypadku drapałem się po głowie, ponieważ moja kompilacja działała dobrze, dopóki nie zaktualizowałem do El Capitan.
bruce1337,
2
  1. Upewnij się, że ruby-devjest zainstalowany
  2. Upewnij się, że makejest zainstalowany
  3. Jeśli nadal otrzymujesz błąd, poszukaj sugerowanych pakietów. Jeśli próbujesz zainstalować coś takiego, gem install pgmusisz również zainstalować bibliotekę lib libpq-dev( sudo apt-get install libpq-dev).
hazmat
źródło
1

Pomaga również zapewnić zainstalowanie libmysqlclient-dev (Ubuntu 14.04)

KLaw
źródło
1

To zadziałało dla mnie. bundle config --global build.snappy --with-opt-dir="$(brew --prefix snappy)"

Mohammed
źródło
0

Na Macu dla mnie to działa:

CONFIGURE_OPTS="--enable-shared" rbenv install 2.2.2
rubyu2
źródło
0

Po kilku poszukiwaniach rozwiązania okazuje się, że potrzebny jest pakiet -dev, a nie tylko ruby1.8. Więc jeśli masz robienie ruby1.9.1

sudo apt-get install ruby1.9.1-dev

lub aby zainstalować ogólną wersję ruby, użyj (zgodnie z komentarzem @lamplightdev):

sudo apt-get install ruby-dev

powinien to naprawić.

Spróbuj zlokalizować mkmf, aby zobaczyć, czy plik faktycznie tam jest.

Rahi.Shah
źródło