Не вдалося встановити 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
Це більш влучна відповідь - sudo apt - отримати встановити libxslt-dev libxml2-dev
Pratik Bothra

Відповіді:


163

Спочатку встановіть залежності:

sudo apt-get install libxslt-dev libxml2-dev

Якщо ви все-таки отримаєте помилку, можливо, вам не вистачає ланцюжка інструментів компілятора:

sudo apt-get install build-essential

Ви отримаєте помилку "libxml2 is missing", якщо вам не вистачає ланцюжок інструментів для збирання (принаймні, я натрапив на цю проблему на Debian Lenny).

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


44
Якщо це не проблема, можливо, вам доведеться встановити libxml2-dev
Ерік Петерсон

1
я запустив вищезгадану команду і отримав помилку 'libxml2 відсутня'. Ви можете мені розповісти більше про встановлення ланцюга інструментів для збирання. b'cos я не знайшов великої допомоги на це.
Рохіт А.

1
Я отримав це повідомлення, оскільки у мене не було встановлено gcc (або будь-який інший компілятор). У мене не було ланцюжка інструментів компілятора.
Ерік Петерсон

7
Якщо ви перебуваєте на Mac: варити встановити libxslt, тоді заваріть встановити libxml2
Sam Backus

245

Можливо, вам потрібно буде встановити обидва ці пакети

sudo apt-get install libxslt-dev libxml2-dev

7
Як коментар оцінив це, що сильно стоїть нижче прийнятої відповіді?
Нова Олександрія

3
Тому що в питанні було сказано "навіть після встановлення всіх залежностей". Тож прийнята відповідь є правильною.
b0fh

62

В Mac OS X (Mavericks), встановлення бібліотек brewта налаштуванняNOKOGIRI_USE_SYSTEM_LIBRARIES=1 перед встановленням дорогоцінного каміння зробило для мене трюк.

Підведення підсумків:

  • Якщо раніше встановлено, видаліть дорогоцінний камінь:

    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." Але просто скопіювати сценарій встановлення дорогоцінного каміння спрацювало :) Дякую!
Automatico

Дякую! після цілого ранку, намагаючись встановити nokogiri, ваша відповідь (особливо з конфігураційними контурами) нарешті змусила його працювати, а не встановити, що заявило (скоріше безпомилково), що libxml2 не існувало, навіть якщо траси були правильними.
Pebbl

2
Використання порту замість варіння на OS X і просто перехід $ NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiriзробив свою
справу

2
В OSX El Capitan 10.11.2 мені довелося використовувати brew install libxml2 libxslt homebrew/dupes/libiconvйого для роботи
Hai Feng Kao

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 встановлює. О, нам потрібні заголовки для складання Нокогірі з бібліотек розробок.


Це зробило це для мене, хоча в 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

залежно від архітектури вашої системи.


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

Вам доведеться перевірити правильність номера версії в шляхах.

Можливо, вам потрібно буде додати сховище NuGet Microsoft:

-Source "https://go.microsoft.com/fwlink/?LinkID=230477"

Я отримую "Неможливо знайти пакет libxml2". Які джерела у вас в Chocolately?
Ісаак Валлер

3
Знайшли проблему! Нові джерела були відключені у джерельному файлі Chocolatey! Але gem не працює: [tid-1789500] 126: Вказаний модуль не вдалося знайти. - C: /Ruby200/lib/ruby/gems/2.0.0/gems/nokogiri-1.6.1/lib/nokogiri/nokogiri.so (LoadError)
Ratko Stibric

@RatkoStibric Я думаю , ви повинні будувати з динамічним LIBS: ...\x64\Release\dynamic\cdecl.
Хлоя

1
Як тільки шоколадно встановлено, додайте джерело, використовуючи таку команду:chocolatey sources add -name NuGet -source "https://go.microsoft.com/fwlink/?LinkID=230477"
Річард Пек

1
Спасибі за Chocolatey, ніколи про це не знав раніше!
Річард Пек


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

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


2

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

sudo apt-get install libxml2

На будь-якій останній версії OS X вона вже повинна бути встановлена.


Я перебуваю на ubuntu, і я дотримувався всіх вищезазначених установок, як сказано в будь-яких інших питаннях stackoverflow.
Рохіт А.

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

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 з джерела та використовує кланг для цього; інакше 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). Підпис, визначений у локальній копії parser.h Nokogiri (знайдений під каталогом встановлення дорогоцінного каміння), є:

xmlParseDoc (const xmlChar *cur);                                                                                                                                                                                

Тому я був у збитку щодо того, як виклик методу в герметично закритому файлі conftest.c не міг збігатися з файлом заголовка для parser.h.

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

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

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

Це дивно, але це спрацювало. Просто переконайтеся, що ви склали Ruby з клангом.


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

Змініть свою версію за допомогою неї.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.