Ошибка при установке json gem 'mkmf.rb не может найти заголовочные файлы для ruby'

В контексте, на удаленном сервере с брандмауэром. Я настраиваю свою среду через прокси. У меня ruby 1.8.7. Когда я пытаюсь установить gem..

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

Поскольку я не знал, в чем проблема, я googled и нашел эти

Любые подсказки? Спасибо!

Ответ 1

Современное обновление эпохи, как утверждает Mimoralea:

В случае, если вы используете ruby 2.0 или 2.2 (спасибо @patrick-davey).

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

или, в общем случае:

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

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

Я бы посоветовал вам установить пакет ruby-dev (ruby-devel для дистрибутивов на основе rpm) на целевой машине. gcc может понадобиться пакет gcc.

Пытаться:

$ sudo apt-get install ruby-dev

Или для Redhat дистрибутив:

$ sudo yum install ruby-devel

Или для [open] SuSE:

$ sudo zypper install ruby-devel

Ответ 2

Если вы используете ruby ​​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

И вы получите шаблон здесь...

Ответ 3

Я также столкнулся с этой проблемой, потому что я установил Ruby на Ubuntu через ярлык, и я подумал, что ruby-dev - это багажник рубина. Поэтому я не установил. Установка ruby2.3-dev исправляет это:

sudo apt-get install ruby2.3-dev

Ответ 4

Для тех, кто получает это в Mac OS X, вам может потребоваться выполнить следующую команду для установки инструментов командной строки XCode, даже если у вас уже установлен XCode:

sudo xcode-select --install

Также вы должны согласиться с условиями XCode, выполнив следующую команду:

sudo xcodebuild -license

Ответ 5

У меня была аналогичная проблема с использованием cygwin для запуска следующей команды:

$ gem install rerun

Я решил это, установив следующие пакеты cygwin:

  • рубинового разви
  • libffi-разви
  • НКА-ядро
  • GCC-г ++
  • сделать
  • automake1.15

Ответ 6

Решение с наибольшим количеством голосов не работает на моей машине (Linux Mint 18.04). После тщательного изучения я обнаружил, что g++ отсутствует. Решено с

sudo apt-get install g++

Ответ 7

если вы используете SUSE

sudo yast2 -i ruby-devel

Ответ 8

Для XCode 11 в MacOS 10.14 это может произойти даже после установки XCode, установки инструментов командной строки и принятия лицензии с помощью

xcode-select --install
xcodebuild -license accept

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

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

В /Library/Developer/CommandLineTools/SDKs все еще может быть macOS 10.14 SDK. Нет необходимости загрязнять системные каталоги, устанавливая старые заголовочные файлы, как указано в других ответах. Вместо этого, указав на нее переменную окружения SDKROOT, будут найдены соответствующие заголовки ruby2.3:

SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/
export SDKROOT
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 должен работать, пока установлена переменная окружения SDKROOT.

Ответ 9

В Fedora 21 и выше вы просто открываете терминал и устанавливаете файлы разработки Ruby как root.

dnf install ruby-devel

Ответ 10

Возможно, вам понадобится установить gcc после установки ruby-devel

Ответ 11

Xcode 11/macOS Catalina

В 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, это изменение попытается включить macOS SDK в эти платформы, что приведет к ошибкам сборки. Чтобы решить эту проблему, либо не устанавливайте переменную среды CPATH при входе в систему, либо временно устанавливайте ее как пустую при запуске xcodebuild следующим образом:

CPATH="" xcodebuild --some-args

Ответ 12

Вам нужно установить весь ruby, а не только минимальный пакет. Правильная команда для использования:

sudo apt install ruby-full

Следующая команда также не установит полный ruby:

sudo apt-get install ruby2.3-dev