Установка Nokogiri завершается неудачно - отсутствует libxml2 - PullRequest
151 голосов
/ 08 июня 2011

Я всегда разбирался с проблемами установки Nokogiri, следуя документации, изложенной в руководстве " Установка Nokogiri ".

Но на этот раз, даже после установки всех зависимостей, Nokogiri не был установлен. Я получаю следующую ошибку:

libxml2 is missing.  please visit <http://nokogiri.org/tutorials/installing_nokogiri.html>

Я попытался установить его, указав каталоги libxml2 и libxslt:

sudo gem install nokogiri -- --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib --with-xslt-dir=/usr/

но он вернул ту же ошибку.

Я следовал за всеми другими связанными статьями переполнения стека, и ни одна из них не помогла. У кого-нибудь есть решение?

Ответы [ 19 ]

4 голосов
/ 03 декабря 2014

Я смог установить Nokogiri 1.6.5 на Fedora 20, выполнив:

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Затем работает:

gem install nokogiri
2 голосов
/ 08 июня 2011

Вы пробовали установить libxml2? Не из rubygems, а через стандартный процесс установки вашей операционной системы. В Ubuntu / Debian, например:

sudo apt-get install libxml2

На любой последней версии OS X она должна быть уже установлена.

1 голос
/ 16 декабря 2015

Для Windows x64:

gem inst nokogiri --pre --platform ruby

Для получения дополнительной информации проверьте эту тему: https://github.com/sparklemotion/nokogiri/issues/864

1 голос
/ 14 мая 2014

Удалось установить vagrant-awe, следуя приведенному выше сообщению, но используя следующую команду:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
1 голос
/ 27 сентября 2015

Для пользователей OSX, если вы уже успешно устанавливали Nokogiri, но при этом получаете ошибки при установке, скажем, с использованием новой версии Ruby, в которую вы добавили и , эта ошибка, которая включает сообщение типа:

The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.

Это может указывать на то, что обновление XCode произошло через App Store, вручную или автоматически, и что вы не открывали его с того времени.

Если это так, вы сможете открыть XCode, согласиться с новой лицензией и затем успешно установить Nokogiri.

1 голос
/ 02 июня 2015

В Mac OS X Yosemite моя ошибка заключалась в том, что я пытался использовать sudo gem install, когда практическое правило не использовать привилегии суперпользователя при установке гемов.

В моем случае он пытался изменить системную установку Ruby, и это не очень хорошая идея. Я установил rbenv, через него установил Ruby 2.2.2 и установил его как global, что является термином из документации rbenv. После этого Nokogiri может установить себя с помощью простого

gem install nokogiri

Никаких хаков или обходных путей не требовалось, просто правильно настроенная среда; Нокогири отлично делает все остальное.

0 голосов
/ 11 ноября 2014
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.8/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.8/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26 --with-iconv-include=/usr/local/Cellar/libiconv/1.14/include --with-iconv-lib=/usr/local/Cellar/libiconv/1.14/lib

Измените свою версию с ним.

0 голосов
/ 22 сентября 2015

Мне удалось установить Nokogiri, запустив следующие пакеты:

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch
0 голосов
/ 25 июля 2015

=== TLDR ===

Как указано в инструкциях , соберите Ruby с последним компилятором clang или хотя бы той же версией, которую Rubygems будет использовать для компиляции собственных расширений Nokogiri libxml и libxsl.

При использовании RVM сборка из источника с флагом --with-ggc=clang была для меня такой:

rvm install 2.2 --with-gcc=clang

Замените 2.2 любой версией, которую вы хотите. --with-gcc=clang обеспечивает сборку RVM из исходного кода и использует для этого clang; в противном случае RVM может предустановить бинарный Ruby, что меня и подвело.

Затем установите Nokogiri как обычно, используя Bundler или Rubygems.

=== В ГЛУБИНЕ ===

Я боролся с этим некоторое время. gem install nokogiri дал мне:

checking for xmlParseDoc() in libxml/parser.h... no
checking for xmlParseDoc() in -lxml2... no
checking for xmlParseDoc() in -llibxml2... no

Копаясь в mkmf.log Я видел:

conftest.c:15:27: error: too few arguments to function call, single argument 'cur' was not specified
int t(void) { xmlParseDoc(); return 0; }  

Nokogiri предоставляет свои собственные libxml и libxsl (по состоянию на 1.6.4). Подпись, определенная в локальной копии Nokogiri файла parser.h (находится в каталоге установки gem):

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Так что я был в растерянности относительно того, как вызов метода в герметически запечатанном файле conftest.c не может совпадать с заголовочным файлом для parser.h.

Когда я понял, что, вероятно, установил двоичный Ruby, я удалил и переустановил, используя --with-gcc=clang (для принудительной компиляции и использования clang), и проблема была решена:

rvm uninstall 2.2
rvm install 2.2 --with-gcc=clang
gem install nokogiri

Я не совсем уверен, почему это работает как системный заголовок libxml /usr/include/libxml2/libxml/parser.h имеет ту же подпись, что и локальная копия Nokogiri.

Это странно, но это сработало. Просто убедитесь, что вы скомпилировали Ruby с помощью clang.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...