Как установить Nokogiri Ruby gem с mkmf.log, говоря, что libiconv не найден?
Я устанавливаю камень Ruby Nokogiri и нахожу ошибку ниже.
Как диагностировать это и решить его?
# gem install nokogiri
Building native extensions. This could take a while...
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension.
...
/opt/ruby/1.9.3-p194/bin/ruby extconf.rb
checking for libxml/parser.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
...
/opt/ruby/1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:381:in `try_do':
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /opt/ruby/1.9.3-p194/lib/ruby/1.9.1/mkmf.rb:506:in `try_cpp'
...
Ответы
Ответ 1
Чтобы диагностировать и решить, вот что сработало для меня.
Чтобы узнать, что не удалось, перейдите в каталог рубиновых драгоценных камней.
Например:
$ cd <MY RUBY DIRECTORY>/lib/ruby/gems/2.0.0/gems
Если вы не знаете каталог своего драгоценного камня, попробуйте следующее:
$ echo $GEM_HOME
/opt/gems/2.0.0
$ cd /opt/gems/2.0.0/gems
Какую версию nokogiri я устанавливаю?
$ ls -ladg nokogiri-*
nokogiri-1.5.5
Перейдите в каталог установщика:
$ cd nokogiri-1.5.5/ext/nokogiri
Попробуйте установить вручную:
$ ruby extconf.rb
Результат:
checking for libxml/parser.h... *** extconf.rb failed ***
...
Я использую Ubuntu, поэтому я ищу любые похожие пакеты:
$ aptitude search libxml
Результаты:
p libxml2 - GNOME XML library
p libxml2-dev - Development files for the GNOME XML library
...
Я считаю, что libxml2 будет работать нормально.
$ apt-get install libxml2
Ruby native gems часто нуждаются в пакетах * -dev для заголовков, поэтому установите их:
$ apt-get install libxml2-dev
Теперь у меня есть файл парсера?
$ find / | grep libxml/parser.h
Да, результат показывает синтаксический анализатор:
/usr/include/libxml2/libxml/parser.h
Теперь попробуйте установить еще раз, на этот раз предоставив путь libxml2:
$ gem install nokogiri -- --with-xml2-dir=/usr/include/libxml2
Он по-прежнему не работает, поэтому прочитайте журнал ошибок mkmf:
$ more mkmf.log
Журнал ошибок показывает, что не удалось, и эти строки выглядят многообещающими:
package configuration for libxslt is not found
Есть ли пакет для него?
$ aptitude search libxslt
Результаты:
v libxslt-dev
i libxslt-ruby
...
Установите пакет dev:
$ apt-get install libxslt-dev
Теперь попробуйте установить еще раз, а также поместите xslt на путь:
$ gem install nokogiri -- \
--with-xml2-dir=/usr/include/libxml2 \
--with-xslt-dir=/usr/include/libxslt
Успех!
Ответ 2
"Установка Nokogiri" - это сайт, посвященный установке Nokogiri на основных платформах. Вот выдержка об установке Nokogiri на Ubuntu:
Поскольку Nokogiri необходимо скомпилировать и динамически связать с как libxml2, так и libxslt, он заслужил репутацию сложно установить.
Начиная с Nokogiri 1.6, исходный код libxml2 и libxslt связан с Nokogiri, и скомпилирован на gem-install-time. Инструкции в этом документ должен работать для всех версий 1.6.4 и более поздних версий.
Ubuntu/Debian
Установка должна выполняться Just Work ™ на Ubuntu и Debian с помощью Nokogiris vendored libxml2 и libxslt:
gem install nokogiri
[...]
Использование системных библиотек
Если вместо Nokogiris продаваемых библиотек вы хотели бы использовать свои систем libxml2, libxslt и связанных с ними библиотек, пожалуйста, сначала понимаете, что вы можете просить Нокогири работать с неподдерживаемым версия libxml2.
sudo apt-get install pkg-config
gem install nokogiri -- --use-system-libraries
FYI - Я использую Nokogiri 1.6.6.2, и он не "просто работает". Я получил его с --use-system-libraries
.
Mac OS X
Совет по сайту также охватывает OS X - это сработало для меня:
gem update --system
xcode-select --install
gem install nokogiri
Заключение
Если у вас есть проблема Nokogiri на любой платформе, вы должны проверить сайт.
Ответ 3
В CentOS вот что мне нужно сделать:
gem update --system
yum install libxml2-devel libxslt-devel ruby-devel
gem install nokogiri -- --use-system-libraries
Ответ 4
Не удалось создать Makefile по какой-либо причине, возможно, отсутствие необходимых библиотек и/или заголовков.
Вероятно, вам не хватает заголовков zlib, которые необходимы для флага -lz
, чтобы правильно скомпилировать источники. Установите в Linux по:
sudo apt-get install libz-dev
Для отсутствия libiconv попробуйте установить пакет libiconv-hook-dev
, который имеет файлы заголовков libiconv-hook
, например.
sudo apt-get install libiconv-hook1 libiconv-hook-dev
В ОС X попробуйте установить средства разработки с помощью: xcode-select --install
.
Если проблема по-прежнему сохраняется, проверьте mkmf.log
файл для получения более подробной информации о вашей ошибке.
В Ubuntu попробуйте следующее сочетание исправлений зависимостей:
sudo apt-get install gcc ruby-dev libxslt-dev libxml2-dev zlib1g-dev
Ответ 5
Ошибка 'create not make make Makefile' также может быть вызвана тем, что вы не согласились с лицензией Xcode (вы должны согласиться на нее после каждого обновления Xcode). Запуск sudo xcodebuild -license accept
должен устранить эту ошибку для вас и позволить вам успешно выполнить gem install nokogiri
.