Установка Nokogiri не удалась - отсутствует libxml2

152

Я всегда работал над проблемами установки 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/

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

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

  • 1
    Какая у вас операционная система?
  • 2
    Это более удачный ответ - sudo apt-get install libxslt-dev libxml2-dev
Теги:
rubygems

19 ответов

132
Лучший ответ

Сначала установите зависимости:

sudo apt-get install libxslt-dev libxml2-dev

Если вы все еще получаете сообщение об ошибке, возможно, отсутствует компиляторная цепочка:

sudo apt-get install build-essential

Вы получите ошибку "libxml2 missing", если вам не хватает инструментария сборки (по крайней мере, я столкнулся с этой проблемой в Debian Lenny).

Тест сборки Nokogiri компилирует заголовочный файл libxml2, чтобы убедиться, что он присутствует, однако он не различает "libxml2 missing" и "компилятор для тестирования libxml2 отсутствует".

  • 44
    Если это не проблема, вам может понадобиться установить libxml2-dev
  • 1
    Я выполнил указанную выше команду и получил ошибку «libxml2 отсутствует». Можете ли вы рассказать мне больше об установке цепочки инструментов сборки. Потому что я не нашел в этом особой помощи.
Показать ещё 3 комментария
253

Вам действительно нужно установить оба этих пакета

sudo apt-get install libxslt-dev libxml2-dev
  • 7
    Как комментарий, оцененный так высоко, сидит ниже принятого ответа?
  • 3
    Потому что вопрос поставлен "даже после установки всех зависимостей". Таким образом, принятый ответ является правильным.
52

В Mac OS X (Mavericks) установка библиотек с помощью brew и установка NOKOGIRI_USE_SYSTEM_LIBRARIES=1 перед установкой gem сделала трюк для меня.

Резюмируя:

  • Если ранее установлено, удалите драгоценный камень:

    gem uninstall nokogiri
    
  • Используйте Homebrew для установки libxml2, libxslt и libiconv:

    brew install libxml2 libxslt libiconv
    
  • Установите драгоценный камень, определяющий пути к библиотекам, которые необходимо связать с:

    NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
    
  • 0
    Я получил несколько ошибок о libiconv: «Apple распространяет libiconv с OS X, вы можете найти его в / usr / lib». Но простое копирование вашего скрипта установки gem сработало :) Спасибо!
  • 0
    Спасибо! после целого утра, пытаясь установить nokogiri, ваш ответ (в частности, с путями конфигурации) наконец заработал - вместо того, чтобы установить (довольно бесполезно), что libxml2 не существует, даже когда пути были правильными.
Показать ещё 3 комментария
20

У меня просто была такая же проблема на Fedora 13. После неудачного и неудачного поиска сделать

gem install nokogiri

работать для меня, я смог установить его и обойти ошибку libxml2 с помощью yum.

Просто установите драгоценный камень через yum вместо команды gem:

su
yum search rubygem-nokogiri   #this find the proper package name
yum install rubygem-nokogiri.i686

Это помогло мне найти правильный ответ для Fedora и, поскольку я использую RVM для управления пакетами Ruby,

yum install rubygem-nokogiri

вытащит все драгоценности и зависимости Ruby в систему, а не в мою среду RVM, и по моему опыту это приведет к очень неприятному и неуклюжим опыту.

Итак, беря свою находку из драгоценного камня Нокогири, вы можете использовать:

yum provides  rubygem-nokogiri

и получите список зависимостей rubygem-Nokogiri, которые показали мне те библиотеки, которые отсутствовали. После этого я побежал:

yum install libxml2-devel libxslt libxslt-devel

Теперь Nokogiri компилируется в Fedora и Nokogiri. D'oh!, нам нужны заголовки для компиляции Nokogiri из библиотек devel.

  • 0
    Это сделало это для меня, хотя в Ubuntu мне пришлось использовать apt-get install libnokogiri-ruby1.9.1 , а затем отредактировать Gemfile, чтобы запросить nokogiri 1.5.5 вместо 1.5.9
13

Вам обычно нужны файлы разработки для создания драгоценных камней. Попробуйте:

sudo apt-get install libxslt-dev libxml2-dev

(Я только видел, что Эрик предложил то же самое в комментарии.)

11

Мне удалось установить это с помощью Chocolatey, Windows 8.1 x64 и DevKit x64.

cinst libxml2
cinst libxslt
cinst libiconv

gem install nokogiri -- 
  --with-xml2-include=C:\Chocolatey\lib\libxml2.2.7.8.7\build\native\include 
  --with-xml2-lib=C:\Chocolatey\lib\libxml2.redist.2.7.8.7\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-iconv-include=C:\Chocolatey\lib\libiconv.1.14.0.11\build\native\include 
  --with-iconv-lib=C:\Chocolatey\lib\libiconv.redist.1.14.0.11\build\native\bin\v110\x64\Release\dynamic\cdecl 
  --with-xslt-include=C:\Chocolatey\lib\libxslt.1.1.28.0\build\native\include 
  --with-xslt-lib=C:\Chocolatey\lib\libxslt.redist.1.1.28.0\build\native\bin\v110\x64\Release\dynamic

Вам нужно проверить правильность номера версии в путях.

Возможно, вам придется добавить репозиторий Microsoft NuGet:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"
  • 0
    Я получаю «Невозможно найти пакет libxml2». Какие источники у вас есть в шоколаде?
  • 0
    @IsaacWaller Может быть, это поможет: gist.github.com/starrychloe/9690817
Показать ещё 5 комментариев
11

Это будет:

sudo yum install -y libxml2 libxml2-devel

на серверах RHEL.

10

В Mac OS X (Mavericks), если ни одно из этих решений не работает, попробуйте:

ARCHFLAGS="-arch x86_64" gem install nokogiri

или

ARCHFLAGS="-arch i386" gem install nokogiri

в зависимости от архитектуры вашей системы.

4

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

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

Затем выполняется:

gem install nokogiri
3

Для всех, кто испытывает эту проблему, я решил ее запустить эту команду в каталоге проекта

gem install nokogiri -- --use-system-libraries

Обновление: я столкнулся с этим снова и попробовал просто обновить драгоценный камень, который работал у меня...

gem update nokogiri

2

В macOS ни один из выше/ниже не работал у меня, пока я явно не предоставил путь XCode libxml2 к --with-xml2-include.

gem install nokogiri -- --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/libxml2 --use-system-libraries
2

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

sudo apt-get install libxml2

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

  • 0
    я нахожусь на Ubuntu, и я следовал за всеми вышеупомянутыми установками, как сказано в любом другом стековом потоке.
1

Для Windows x64:

gem inst nokogiri --pre --platform ruby

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

1

Для пользователей 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

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

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

gem install nokogiri

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

  • 0
    Использование sudo - это нормально, если вы понимаете, как оно работает, где оно вступит в силу, почему устанавливаемые или обновляемые файлы должны быть установлены, и как отменить действие в случае сбоя. В противном случае использование песочницы типа rbenv или RVM - ДЕЙСТВИТЕЛЬНО хорошая идея.
1

Была возможность установить блуждающий страх, следуя вышеприведенной записи, но используя следующую команду:

NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
0

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

$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch
0

=== TL;DR ===

Как инструкции, создайте 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.

=== В DEPTH ===

Я боролся с этим некоторое время. 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.

0
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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню