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?


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


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

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

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++

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!


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”


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

1

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


1

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


0

Na Macu dla mnie to działa:

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.