Ошибка установки Nokogiri -libxml2 отсутствует
Я всегда работал над проблемами установки 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
Сначала установите зависимости:
sudo apt-get install libxslt-dev libxml2-dev
Если вы все еще получаете сообщение об ошибке, возможно, отсутствует компиляторная цепочка:
sudo apt-get install build-essential
Вы получите ошибку "libxml2 missing", если вам не хватает инструментария сборки (по крайней мере, я столкнулся с этой проблемой в Debian Lenny).
Тест сборки Nokogiri компилирует заголовочный файл libxml2, чтобы убедиться, что он присутствует, однако он не различает "libxml2 missing" и "компилятор для тестирования libxml2 отсутствует".
Ответ 2
Вам действительно нужно установить оба этих пакета
sudo apt-get install libxslt-dev libxml2-dev
Ответ 3
В 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"
Ответ 4
У меня просто была такая же проблема на 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.
Ответ 5
Вам обычно нужны файлы разработки для создания драгоценных камней. Попробуйте:
sudo apt-get install libxslt-dev libxml2-dev
(Я только видел, что Эрик предложил то же самое в комментарии.)
Ответ 6
Это будет:
sudo yum install -y libxml2 libxml2-devel
на серверах RHEL.
Ответ 7
Мне удалось установить это с помощью 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"
Ответ 8
В Mac OS X (Mavericks), если ни одно из этих решений не работает, попробуйте:
ARCHFLAGS="-arch x86_64" gem install nokogiri
или
ARCHFLAGS="-arch i386" gem install nokogiri
в зависимости от архитектуры вашей системы.
Ответ 9
Я смог установить Nokogiri 1.6.5 на Fedora 20, выполнив:
export NOKOGIRI_USE_SYSTEM_LIBRARIES=true
Затем выполняется:
gem install nokogiri
Ответ 10
Для всех, кто испытывает эту проблему, я решил ее запустить эту команду в каталоге проекта
gem install nokogiri -- --use-system-libraries
Обновление: я столкнулся с этим снова и попробовал просто обновить драгоценный камень, который работал у меня...
gem update nokogiri
Ответ 11
Вы пытались установить libxml2? Не из рубигемов, а через стандартный процесс установки для вашей операционной системы. В Ubuntu/Debian, например:
sudo apt-get install libxml2
В любой последней версии OS X он уже должен быть установлен.
Ответ 12
В 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
Ответ 13
Была возможность установить блуждающий страх, следуя вышеприведенной записи, но используя следующую команду:
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 vagrant plugin install vagrant-aws
Ответ 14
В Mac OS X Yosemite моя ошибка заключалась в том, что я пытался использовать sudo gem install
, когда это правило не использовало привилегии суперпользователя при установке драгоценных камней.
В моем случае он попытался изменить системную установку Ruby, и это не очень хорошая идея. Я установил rbenv, установил Ruby 2.2.2 через него и установил его как global
, что является термином из документации rbenv. После этого Nokogiri мог установить себя с простым
gem install nokogiri
Никакие хаки или обходные пути не были необходимы, только правильно настроенная среда; Нокигири отлично справляется с этим.
Ответ 15
Для пользователей OSX, если вы уже успели установить Nokogiri раньше, все же возникают ошибки, устанавливающие его, скажем, используя новую версию Ruby, которую вы добавили, и эту ошибку, которая включает в себя следующее сообщение:
The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
Это может свидетельствовать о том, что обновление XCode произошло через App Store, либо вручную, либо автоматически, и вы не открыли его с этого времени.
Если это так, вы должны иметь возможность открывать XCode, соглашаться на новую лицензию и успешно устанавливать Nokogiri.
Ответ 16
Для Windows x64:
gem inst nokogiri --pre --platform ruby
Для получения дополнительной информации проверьте эту тему: https://github.com/sparklemotion/nokogiri/issues/864
Ответ 17
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
Измените свою версию.
Ответ 18
=== 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.
Ответ 19
Мне удалось установить Nokogiri, выполнив следующие пакеты:
$ dnf group install "C Development Tools and Libraries"
$ dnf install ruby-devel libxml2-devel patch