Помилка під час встановлення json gem 'mkmf.rb не може знайти файли заголовка для ruby'


407

Для контексту це на віддаленому сервері, який має брандмауер. Я налаштовую своє середовище через проксі. Я маю ruby 1.8.7. Коли я намагаюся встановити дорогоцінний камінь ..

sudo gem install --http-proxy <host address>:<port> json

Я отримую таку помилку:

Building native extensions.  This could take a while...
ERROR:  Error installing json:
        ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h

Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/json-1.8.1 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/gems/json-1.8.1/ext/json/ext/generator/gem_make.out

Оскільки я не знав, в чому проблема, я погуглив і знайшов їх

Якісь підказки? Дякую!


перевірте презентацію /usr/lib/ruby/ruby.hфайлу, якщо він присутній, покажіть нам повідомлення про помилку gem_make.out.
Малу Скрылевъ

Відповіді:


785

Оновлення сучасної епохи, як зазначає mimoralea :

Якщо ви використовуєте ruby ​​2.0 або 2.2 (спасибі @ patrick-davey).

sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

або, загальним способом:

sudo apt-get install ruby-dev

або

sudo apt-get install ruby`ruby -e 'puts RUBY_VERSION[/\d+\.\d+/]'`-dev

Перше посилання, яке ви опублікували, - це саме ваш випадок: не встановлено середовища для розробки рубінів. Розвиток env потрібен для складання розширень для рубінів, про які в основному написано C. Проксі не має нічого спільного з проблемою: все завантажується чудово, просто компіляція не вдається.

Я б запропонував вам встановити пакет ruby-dev( ruby-develдля дистрибутива на основі оборотів в хвилину) на вашу цільову машину.

gcc пакет також може знадобитися.

Спробуйте:

$ sudo apt-get install ruby-dev

Або для дистрибутива Redhat:

$ sudo yum install ruby-devel

Або для [відкрити] SuSE:

$ sudo zypper install ruby-devel

2
Дякую! Я мав на увазі, що відповідь на це питання здавалася специфічним для модуля. Я думаю , що замість ruby-devІТС ruby-devel. Ось де я знайшов, що саме мені потрібно - digitalocean.com/community/articles/…
Навнеет

9
Після установки ruby-devel (на Fedora 20) я отримав помилку *** extconf.rb не вдалося ***. Після встановлення gcc, як ви запропонували, все працювало нормально.
Wayne Riesterer

Ви можете додати sudo zypper install ruby-develдля openSUSE
superbob

На Ubuntu це нічого не робить. Відсутній пакет є ruby2.2-dev(або в будь-якій версії, яку ви встановили).
Luís de Sousa

2
Ні, ця відповідь нічого не допомогла вирішити. Правильна відповідь - міморалія .
Luís de Sousa

177

Для Xcode 11 на macOS 10.14 це може статися навіть після встановлення Xcode та встановлення інструментів командного рядка та прийняття ліцензії на

sudo xcode-select --install
sudo xcodebuild -license accept

Проблема полягає в тому, що Xcode 11 постачає SDK macOS 10.15, який включає заголовки для ruby2.6, але не для ruby2.3 для macOS 10.14. Ви можете перевірити, що це ваша проблема, запустивши

ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

який на macOS 10.14 з Xcode 11 друкує неіснуючий шлях

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Однак Xcode 11 встановлює macOS 10.14 SDK в межах /Library/Developer/CommandLineTools/SDKs/MacOS10.14.sdk. Не потрібно забруднювати системні каталоги, встановлюючи старі файли заголовків, як запропоновано в інших відповідях. Натомість, вибравши цей SDK, будуть знайдені відповідні заголовки ruby2.3:

sudo xcode-select --switch /Library/Developer/CommandLineTools
ruby -rrbconfig -e 'puts RbConfig::CONFIG["rubyhdrdir"]'

Тепер це слід правильно надрукувати

/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/include/ruby-2.3.0

Аналогічно, gem installмає працювати під час вибору цього SDK.

Щоб повернутися до поточного SDK Xcode, використовуйте

sudo xcode-select --switch /Applications/Xcode.app

14
Легенда. Точно моя проблема 10.14.6. Сумно не може проголосувати двічі.
Дієго Френіче

2
Ви, пане, незрозумілий знавець. Велике спасибі,
Рубін Сімонс

Дякую за детальну інформацію! Нарешті воно спрацювало, створивши "ПОМИЛКА: Помилка встановлення jekyll: jekyll-sass-converter вимагає версії Ruby> = 2.4.0.". Це змушує мене сміятися.
Микола Ольшевський

@NickolayOlshevsky в такому випадку вам потрібно встановити рубін через домашню мову, наразі у версії 2.6.5.
joki

1
Ви химерна легенда кодування.
Альоша Новакович

75

Якщо ви користуєтеся рубіном 2.0 або 2.2 (спасибі @ patrick-davey) або 2.3 (спасибі @juanitofatas).

sudo apt-get install ruby-dev
sudo apt-get install ruby2.0-dev
sudo apt-get install ruby2.2-dev
sudo apt-get install ruby2.3-dev

І ви отримаєте викрійку тут ...


6
Або якщо ви використовуєте 2.2 ...sudo apt-get install ruby2.2-dev
patrickdavey

@ patrick-davey E: Unable to locate package ruby2.2-dev E: Couldn't find any package by regex 'ruby2.2-dev'
Aparichith

@dson, ймовірно, ви використовуєте стару версію Ubuntu. Спробуйте оновити.
Пітікос

Я отримав таку ж помилку, і я використовую повністю оновлену версію Linux Mint. Я не думаю, що проблема стикання з ОС є проблемою.
Ендрю Фолкнер

2
Якщо ви використовуєте стару версію Ubuntu, наприклад Trusty (14.04), додайте яскраву скриньку PPA для Ruby:sudo apt-add-repository -y ppa:brightbox/ruby-ng && sudo apt-get update && sudo apt-get install -y ruby2.2-dev
Siddhu


19

Для тих, хто отримує це в Mac OS X, вам може знадобитися виконати наступну команду для встановлення інструментів командного рядка XCode, навіть якщо у вас вже встановлено XCode:

sudo xcode-select --install

Також ви повинні погодитись із умовами та умовами XCode, виконавши таку команду:

sudo xcodebuild -license

Це була правильна відповідь для мене. У мене не було заголовків Ruby Development. Після того, як я встановив xCode, початкова команда спробувала запустити. Дякую!
Sweet Chilly Philly

На OSX з Mojave мені довелося запустити так:su - $USER -c 'xcode-select --install'
Belden

Це працювало і для мене.
adougies

11

У мене була схожа проблема з використанням cygwin для запуску наступної команди:

$ gem install rerun

Я вирішив це, встановивши наступні пакети cygwin:

  • ruby-devel
  • libffi-devel
  • gcc-core
  • gcc-g ++
  • зробити
  • автоматике1.15

Це segfault для мене:/cygdrive/z/.gem/ruby/extensions/x86-cygwin/json-1.8.3/json/ext/parser.so: [BUG] Segmentation fault at 0x0001b8
rr-

Вирішується виконанням rm -rf ~/.gem/та переоформленням команди.
rr-

ruby-devon малинові пі
CONvid19

11

Більшість проголосованих рішень не працювали на моїй машині (Linux mint 18.04). Після уважного огляду я виявив, що g ++ відсутній. Вирішено с

sudo apt-get install g ++


1
Це працювало для мене на Ubuntu 18.04. Я також повинен був зробити sudo apt-get install зробити перед установкою g ++ для роботи.
Скотт Лінднер

Можна підтвердити встановлення makeта g++виправити мою проблему також на Ubuntu 18.04!
Арда

9

у випадку, якщо ви використовуєте SUSE

sudo yast2 -i ruby-devel

2
Я віддаю перевагу sudo zypper in ruby-devel.
Lesik2008

5

Xcode 11 / macOS Каталіна

У Xcode 11 / macOS Catalina файли заголовків перестають знаходитись у старому місці, а старий /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgфайл більше недоступний.

Натомість заголовки тепер встановлені в /usr/includeкаталог поточного шляху SDK:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

Більшу частину цього каталогу можна знайти, використовуючи вихідний файл xcrun --show-sdk-path. І якщо ви додасте цей шлях доCPATH змінної середовища, тоді сценарії побудови (включаючи ті, що викликаються через bundle), як правило, зможуть його знайти.

Я вирішив це, встановивши своє CPATHв моєму .zshrcфайлі:

export CPATH="$(xcrun --show-sdk-path)/usr/include"

Після відкриття нової оболонки (або запуску source .zshrc) я більше не отримую повідомлення про помилку mkmf.rb не можу знайти файли заголовка для ruby ​​за адресою /usr/lib/ruby/ruby.h, і rubygems встановити належним чином.

Примітка щодо побудови на не macOS платформах

Якщо ви будуєте на не macOS платформах, таких як iOS / tvOS / watchOS, ця зміна спробує включити SDK macOS у ці платформи, що спричинить помилки в побудові. Щоб вирішити, не встановлюйте CPATHзмінну середовища для входу, або тимчасово встановіть її порожньою, коли вона працює xcodebuildтак:

CPATH="" xcodebuild --some-args

2
Чи є у вас документація щодо CPATH? Встановити це не вирішує питання для мене. Коли я перевірив, що це значення в першу чергу, воно виявилося невизначеним.
Іліас Карим

1
gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html - можливо, вам знадобиться знайти іншу змінну середовища в залежності від мови / компілятора, який ви використовуєте. Це нормально, що це було б встановлено за замовчуванням
Аарон Брагер

І, якщо ви цього ще не бачили, не може бути пробілів у шляху / імені Xcode
Feldur

З усіх відповідей тут, це єдине рішення, яке працювало на мене. Я на Mojave 10.14.6і XCode 11.3.1. Дякую тобі, мені було потрібно 1 день, щоб вирішити це питання: /
user2350644

4

У Fedora 21 і новіших версіях ви просто відкриєте термінал і встановите файли Ruby Development як корінь.

dnf install ruby-devel

2

Можливо, вам доведеться встановити gcc після встановлення ruby-devel



1

На Mac 10.14, здається, файли заголовків не встановлені в потрібному місці. Замість того, щоб змінити контури, як інші виправлення, я зміг просто запустити це:

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

Дотримуйтесь інструкцій, і це вирішило цю проблему для мене.


0

Вам потрібно встановити весь рубін, а не лише мінімальний пакет. Правильна команда для використання:

sudo apt install ruby-full

Наступна команда також не встановить повний рубін:

sudo apt-get install ruby2.3-dev

0

Для Ubuntu 18 після перевірки файлу журналу, згаданого під час встановлення

Результати увійшли до /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

з

less /var/canvas/vendor/bundle/ruby/2.5.0/extensions/x86_64-linux/2.5.0/nio4r-2.5.2/gem_make.out

Я помітив, що makeне знайдений. Так встановлений make by

sudo apt-get install make

все спрацювало.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.