Подтвердить что ты не робот

Как установить 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'
...
4b9b3361

Ответ 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 на основных платформах. Вот выдержка об установке 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.