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

156

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

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

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

Рохит А.
источник
1
Какая у вас операционная система?
Джейк Джонс
2
Это более
удачный ответ

Ответы:

163

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

sudo apt-get install libxslt-dev libxml2-dev

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

sudo apt-get install build-essential

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

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

Эрик Петерсон
источник
44
Если это не проблема, вам может потребоваться установить libxml2-dev
Эрик Петерсон,
1
Я выполнил указанную выше команду и получил ошибку «libxml2 отсутствует». Можете ли вы рассказать мне больше об установке цепочки инструментов сборки. Потому что я не нашел в этом особой помощи.
Рохит А.
1
Я получил это сообщение, потому что у меня не был установлен gcc (или любой другой компилятор). У меня не было цепочки инструментов компилятора.
Эрик Петерсон
7
Если у вас Mac: brew install libxslt, то brew install libxml2
Сэм Бэкус
245

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

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

В 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"
Эдуардо
источник
Я получил несколько ошибок о libiconv: «Apple распространяет libiconv с OS X, вы можете найти его в / usr / lib». Но простое копирование вашего скрипта установки gem сработало :) Спасибо!
Автомат
Спасибо! после целого утра, пытаясь установить nokogiri, ваш ответ (в частности, с путями конфигурации) наконец заработал - вместо того, чтобы установить (довольно бесполезно), что libxml2 не существует, даже когда пути были правильными.
Пеббл
2
Используя порт вместо brew на OS X и просто собираясь, $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiriдобился цели
Andres Kütt
2
В OSX El Capitan 10.11.2 я должен использовать brew install libxml2 libxslt homebrew/dupes/libiconvего для работы
Хай Фенг Као
2
Кроме того, мне нужно добавить --with-xml2-include="/usr/local/opt/libxml2/include/libxml2"для gem install nokogiriкоманды к работе. Иначе, это покажет libxml2 version 2.6.21 or later is required!(моя версия libxml2 2.9.2)
Hai Feng Kao
22

У меня была такая же проблема на 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, и, по моему опыту, это приведет к очень разочаровывающему и унизительному опыту.

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

yum provides  rubygem-nokogiri

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

yum install libxml2-devel libxslt libxslt-devel

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

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

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

ARCHFLAGS="-arch x86_64" gem install nokogiri

или

ARCHFLAGS="-arch i386" gem install nokogiri

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

Rilla
источник
13

Обычно вам нужны файлы для разработки гемов. Пытаться:

sudo apt-get install libxslt-dev libxml2-dev

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

pduersteler
источник
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"
Хлоя
источник
Я получаю «Невозможно найти пакет libxml2». Какие источники у вас есть в шоколаде?
Исаак Уоллер
3
Нашел проблему! Исходные коды Nuget отключены в исходном файле Chocolatey! Но гем не работает: [tid-1789500] 126: указанный модуль не найден. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ратко Стибрик
@RatkoStibric Я думаю, что вы должны строить с динамическими библиотеками ...\x64\Release\dynamic\cdecl.
Хлоя
1
После того, как chocolately установлен, добавьте источник, используя следующую команду:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Ричард Пек
1
Спасибо за Шоколадку, никогда не знала об этом раньше!
Ричард Пек
11

Это будет:

sudo yum install -y libxml2 libxml2-devel

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

Hohner
источник
6

В 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
sobstel
источник
4

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

export NOKOGIRI_USE_SYSTEM_LIBRARIES=true

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

gem install nokogiri
Симона
источник
4

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

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

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

gem update nokogiri

Jbur43
источник
2

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

sudo apt-get install libxml2

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

d11wtq
источник
я нахожусь на Ubuntu, и я следовал за всеми вышеупомянутыми установками, как сказано в любом другом стековом потоке.
Рохит А.
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. После этого Нокогири мог установить себя с помощью простого

gem install nokogiri

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

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

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

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
user1455180
источник
0

=== 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.

Johnster
источник
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

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

луб
источник