Користувач Mac і отримання ПОПЕРЕДЖЕННЯ: Nokogiri створено на основі LibXML версії 2.7.8, але динамічно завантажується 2.7.3


82

Я провів всілякі дослідження і спробував багато різних речей. Я знаю, що на це питання відповідали багато разів, але жодне із запропонованих рішень не працює для мене.

Після оновлення до Lion я отримую помилки сегментації в Ruby. Я досить впевнений, що це Нокогірі. Тож я встановив libxml2 через Homebrew. Я побіг brew link libxml2. Потім я переінсталював Nokogiri, використовуючи цю версію бібліотеки.

Для доказу:

$ nokogiri -v
# Nokogiri (1.5.0)
---
warnings: []
nokogiri: 1.5.0
ruby:
  version: 1.9.2
  platform: x86_64-darwin11.0.0
  description: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
  engine: ruby
libxml:
  binding: extension
  compiled: 2.7.8
  loaded: 2.7.8

Я вже включив Nokogiri у верхній частині мого gemfile, і я також вимагав його у своєму файлі середовища. Я не уявляю, чому я все ще отримую це попередження.

Будь-які пропозиції чи ідеї, щоб переконатися, що завантажується правильна версія libxml2?


9
Nokogiri 1.6 і новіших версій тепер поєднує libxml2 із самоцвітом, тому ви можете виправити цю помилку, просто вилучивши libxml2 із Homebrew. brew remove --force libxml2 bundle config --delete build.nokogiri gem uninstall nokogiri libxml-ruby bundle
Nate Berkopec


@NateBerkopec. Ваше рішення спрацювало для мене, тоді як прийнята відповідь - ні.
egyamado

1.6.2.1і Ubuntu 12.04не грай приємно. Повернувшись, щоб 1.6.1виправити це, спробувавши всі інші виправлення, які я міг знайти.
Damien Roche

Відповіді:


39

Я просто витратив більшу частину ранку, працюючи над цим попередженням. Це виправлення призначене для людей, які використовують Mac OS Lion. Виправлення вище за допомогою

bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

призначений для Snow Leopard з libxml2, встановленим через MacPorts.

З Lion, libxml2 завантажується як частина процесу завантаження. Незалежно від того, на який libxml2 вказує Nokogiri, під час виконання буде використовуватися бібліотека системи Lion за замовчуванням для libxml2. Lion використовує libxml2.2.7.3, знайдений у /usr(not /usr/local).

Як згадувалося в багатьох інших місцях, можна просто ігнорувати попередження. Якщо, як і я, попередження зводить вас з розуму, ви можете зробити це:

bundle config build.nokogiri --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

Цікаво, що якщо ви вводите nokogiri -vв командному рядку, ви отримаєте протилежне попередження:

WARNING: Nokogiri was built against LibXML version 2.7.3, but has dynamically loaded 2.7.8

Це свідчить про те, що більше завантажується libxml2, а Ruby та Rails використовують системний libxml2, а командний рядок - libxml2 із шляху середовища. У будь-якому випадку, це мовчить помилку для мене.

Я ще раз скажу - це тільки для Лева. Попереднє виправлення буде працювати для Snow Leopard.

На цьому відповідь закінчується. Припиніть читати тут.


Добре, ти не перестав читати ... ну ...

НЕ РЕКОМЕНДОВАНО!!!!!!

Вас попередили. Ви можете перевірити, що Mac OSX завантажує бібліотеку libxml2 у її завантажувальну стрічку, вимкнувши libxml2, знайдений у /usr/lib. Зробіть щось на зразок копіювання всіх версій libxml2*.dylibдо libxml2*.dylib.old(на моїй машині це було libxml2.2.7.3, libxml2.2і libxml2).

Після того, як ви це зробите, запуск Nokogiri не призведе до помилок. Це тому, що він не може знайти завантажений libxml2 і тепер буде йти шляхом навколишнього середовища, врешті-решт знаходячись libxml2.2.7.8у /opt/local.

АЛЕ ви не зможете скопіювати старі файли libxml назад. Це пов’язано з тим, що ОС потребує libxml2, який був завантажений у завантажувальну стрічку.

Вимкнення та повторне ввімкнення завадить машину. Екран входу буде зависати і зависати і зависати. Вимкніть і знову ввімкніть живлення в режимі одного користувача (утримуйте Command- Sпід час перезавантаження). Ви можете спостерігати, як відбувається завантаження. Низько і ось, він видає помилку, що не може завантажити libxml2, а потім перестає працювати.

Вимкніть живлення та ввімкніть його знову. Цього разу завантажтесь у режим відновлення (утримуйте Command- Rабо утримуйте, Optionа потім виберіть диск відновлення). У режимі відновлення відкрийте термінал ( utilities/terminal). Встановіть /usr/libна HD (спробуйте /Volumes/Macintosh\ HD/usr/lib) і скопіюйте файли libxml2 назад. Перезавантажтесь, і все буде добре.


1
хе ... ваші інструкції щодо розподілу варіантів збірки між / usr та / opt / local (MacPorts) зробили це за мене ... дякую
Філіп Коббе

Радий бачити когось розумнішого за мене, також впав із кошмару Apple Bootstrap libxml2 :)
Кентон,

Я просто випадково натрапив на цю публікацію і не мав до неї ніякої користі, але ця детальна відповідь заслуговує на багато голосів за зусилля!
starscream_disco_party

2
Я використав варіацію цього рішення (де моєю динамічно завантаженою версією була 2.9.0):bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.0/include/libxml2/
sberkley

Дякую @sberkley за оновлену підказку. Коли я запустив його, я помітив, що якщо ви робите це на ~, здається, це значення встановлюється глобально. Тож, можливо, ви можете просто зробити це один раз і ніколи більше не турбуватися про це.
дума

97

Якщо ви встановили Nokogiri з gem install nokogiri, ви можете вирішити це попередження, запустивши gem pristine nokogiriперекомпіляцію розширення C самоцвіту.

Якщо ви встановили Nokogiri з bundle install, ви можете усунути це попередження, виконавши bundle exec gem pristine nokogiriперекомпіляцію розширення C дорогоцінного каменя там, де його встановив Bundler.


5
Чудово, дякую. bundle exec gem pristine nokogiriприбив його.
toxaq

1
У мене чудово працювало з попередженням про побудову проти 2.8.0 шляхом динамічного завантаження 2.7.8 на Ubuntu 12.04
Річард

щоб отримати попередження про поїздку на Лева та рейки 3.2.16, мені довелося зробити обидва пакети exec gem первозданних нокогірі, а також перемістити "gem nokogiri" попереду "gem rails"
jpw

1
Це спрацювало для мене в OS X Mavericks, прийнята відповідь ні.
CBanga

Це повинна бути прийнята відповідь, а не те, що потенційно може цеглити вашу машину, не кажучи вже про надзвичайну багатослів'я та заплутаність.
Greg Blass

58

Щоб виправити це, якщо ви користуєтесь домоволодінням та пакетом, додайте gem 'nokogiri' у верхню частину Gemfile, а потім виконайте такі команди:

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle install

Якщо ви не використовуєте пакет, виконайте натомість такі команди:

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2 --with-xml2-config
brew install libxslt
gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.9.1/include/libxml2 --with-xml2-lib=/usr/local/Cellar/libxml2/2.9.1/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/

У вашому додатку вам слід спочатку вимагати nokogiri , щоб змусити програму завантажувати динамічну бібліотеку libxml2 замість попередньої системної версії libxml2, завантаженої самоцвітами, які не змогли вказати, яку бібліотеку завантажувати.


Я не думаю , що linkі unlinkпотрібні команди. Я зміг уникнути, не використовуючи їх.
М. Скотт Форд

Зверніть увагу, що, можливо, вам доведеться додавати gemкоманди, bundle execнаприклад, якщо ви використовуєте rbenv.
асиметричний

4
Чи є якась причина, яку ви не включаєте brew uninstall libxslt?
Nate Berkopec,

5
Для тих, хто копіює цю відповідь, останньою версією libxml2 є 2.9.0 - обов’язково редагуйте це під час копіювання!
Nate Berkopec,

7
Це підкреслює, що останнє речення важливо: спочатку вимагайте нокогірі. Зробіть це, поставивши нокогірі у свій гемфільм попереду рейок.
Wolfram Arnold

28

Нічого з цього у мене не спрацювало.

У мене було встановлено libxml2 у пізнішій версії (2.7.8) з brew. Це змусило нокогірі скомпілювати проти нього та пізніші проблеми. Рішення, видаліть його, потім побудуйте, а потім встановіть за бажанням.

Ось що працювало:

  • brew uninstall libxml2 (якщо встановлено раніше)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (необов’язково)

3
Це виправлено для мене в OS X 10.8.2 за допомогою libxml 2.7.8 / 2.8.0. Просто вилучення самоцвіту нокогірі та його перевстановлення не вирішило його, а brew uninstall libxml2заздалегідь. Дякую!
стереоскотт

1
ідеальна відповідь, якщо використовувати доморощену мову
awenkhh

+1 Ідеально. Головне - НЕ встановлювати будь-яку іншу версію libxml2 під час встановлення nokogiri.
Nate Cook

Крім того, на випадок, якщо хтось інший є RubyMine, це те, що я допоміг мені виправити помилку, з якою я отримував із bundle installRubyMine. Ви можете побачити ту ж помилку в командному рядку, якщо ввестиrake --tasks
Nate Cook

Це було правильним рішенням для мене. Я запускаю Mountain Lion і використовую доморощену мову (та Intellij IDEA).
дума

16

Рішення (для мене) після оновлення до Mountain Lion було набагато простішим:

gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri

4
Дякуємо за відгук, Old Pro. Я закликаю вас розглянути можливість повторного прочитання запитань та відповідей щодо привілеїв SO. "Використовуйте свої голоси проти, коли ви стикаєтесь із надзвичайно неакуратним дописом, що не витрачає зусиль, або відповіддю, яка є чітко і, можливо, небезпечно неправильною". Ця відповідь, очевидно, спрацювала для кількох людей, включаючи ОП, тому я не думаю, що це заслуговує проти
IAmNaN

1
Через нещодавно виявлену вразливість DOS щодо споживання процесора ( vuxml.org/freebsd/843a4641-9816-11e2-9c51-080027019be0.html ), ми оновили libxml2 на FreeBSD, спричинивши відповідне попередження nokogiri . Повторна інсталяція, як описано, вирішила проблему.
user569825

Працював для мене на OSX 10.8.5
steakchaser

1
Ні, @Tass. оновлення просто перевіряє, чи є нова версія дорогоцінного каменя, чого в цьому випадку немає. Минуло більше двох років, але, схоже, пам’ятаю, не виконуючи видалення, оновлення було NOP. Я підозрюю, що версія nokogiri не змінюється, але бібліотеки потрібно компілювати з різними заголовками після оновлення ОС. Цей метод, до речі, працював після декількох оновлень OSX.
IAmNaN

9

Відповідно до коментаря від patrickmcgraw вище, просто введення нокогірі як першого запису в моєму Gemfile працювало для мене. Я даю це як окрему відповідь, оскільки оригінальний коментар похований.

source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...

1
Пояснення, чому це працює, див. У відповіді @Jarrett
Jared Beck

Ага! Допомагає мені з "ПОПЕРЕДЖЕННЯ: Nokogiri був побудований проти LibXML версії 2.8.0, але динамічно завантажував 2.7.8"
Артем Амінов,

4

Bundler має параметри встановлення місць збірки за замовчуванням. Так, наприклад, з libxml2, встановленим за допомогою macports:

$ bundle config build.nokogiri --with-xml2-include=/opt/local/include/libxml2 --with-xml2-lib=/opt/local/lib --with-xslt-dir=/opt/local

Після цього і bundle installпопередження зникло.

Також є кілька корисних прикладів для встановлення параметрів збірки у вікі nokogiri .


4

Схоже, ви оновили системні бібліотеки після встановлення дорогоцінного каменя, тому вам доведеться оновити Nokogiri. Щоб використовувати поточну версію lib:

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

2

У мене була подібна проблема, і я просто вирішив її таким чином:

У моєму випадку у мене встановлений RVM, і у мене були набори самоцвітів @global та @project. В обох було встановлено нокогірі, а в одного з них побудовано з різним libxml.

Відновлення обох (у мене є на те причини) вирішило проблему.

Сподіваюся, це допомагає ..


1
gem uninstall nokogiri
bundle  #install nokogiri again

Якщо це не вдається, "libxml2 відсутній." і ви бачите gems / nokogiri-1.5.0 / ext / nokogiri / mkmf.log, намагаючись використати "/usr/bin/gcc-4.2 ...", тоді вам не вистачає /usr/bin/gcc-4.2

Рішення:

sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

До:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2

Після:

$ ll /usr/bin/gcc*
lrwxr-xr-x  1 root  wheel  12 Jan 15 00:16 /usr/bin/gcc -> llvm-gcc-4.2
lrwxr-xr-x  1 root  wheel  12 Jan 15 21:07 /usr/bin/gcc-4.2 -> /usr/bin/gcc

Якщо вам справді не вистачає libxml2 libxslt, тоді

brew update
brew install libxml2 libxslt
brew link libxml2 libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/Cellar/libxml2/2.8.0/include/libxml2/ --with-xml2-lib=/usr/local/Cellar/libxml2/2.8.0/lib/ --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26/
bundle

FYI: Я керую гірським левом із заварюванням та пакетом.



0

Насправді мені було встановлено 2 версії libxml, одну з джерела, одну з RPM.

Далі - моє повне рішення

Я видалив джерело (з вихідного каталогу)

sudo make uninstall

Видаліть пучки

rm -rf ~/.bundle ~/.bundler

Оновлений LD (можливо, це доведеться робити як root, а не sudo)

sudo ldconfig

Потім перевстановив комплект

bundle install

0

Щойно натрапив на це сам (OS X Lion 10.7.5). Моє точне повідомлення було: Nokogiri створено на основі LibXML версії 2.8.0, але динамічно завантажується 2.7.3

Я спробував кілька згаданих тут пропозицій, жодна не спрацювала, але це зробило:

gem install nokogiri -- --with-xml2-dir=/usr --with-xslt-dir=/opt/local --with-iconv-dir=/opt/local

Пояснення таке: "Це трапляється тому, що використовується система Lion за замовчуванням libxml2 (завантажена при завантаженні), незалежно від того, проти якого libxml2 був побудований Нокогірі."

Кредити на: https://coderwall.com/p/o5ewia


0

ОС: Maverick 10.9.3

Рубін 1.9.3

ПОПЕРЕДЖЕННЯ: Nokogiri був побудований проти LibXML версії 2.9.1, але динамічно завантажував 2.9.0

Моє рішення:

gem uninstall nokogiri
brew update
cd /usr/local
brew versions libxml2
git checkout 5dd45d7 /usr/local/Library/Formula/libxml2.rb # libxml version 2.9.0
brew install libxml2
bundle install or gem install nokogiri -v "1.5.11"

Сподіваюся, це допоможе


0

Якщо у вас є це повідомлення, і ваш nokogiri застарів, версія доступна з джерела gem, просто запустіть, bundle update nokogiriщоб отримати новий код і перекомпілювати. Ваша помилка повинна зникнути.


0

ОС: Каталіна

Попередження: попередження nokogiri створено щодо libxml версії 2.9.10, але динамічно завантажується 2.9.4

Я дотримувався кроків Michiel de Mare , але не вдалося встановити libxml2 --with-xml2-config із помилкою помилки. Тож я встановив libxml2 та libxslt та взяв до відома результати обох команд.

 brew install libxml2                   
==> Downloading https://homebrew.bintray.com/bottles/libxml2-2.9.10_2.catalina.bottle.tar.gz
Already downloaded: /Users/alberto/Library/Caches/Homebrew/downloads/9ddf5cb90fd16a7eb531e37bb748fd392f30214d9fe1568b2b70d28cc368c8f7--libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Pouring libxml2-2.9.10_2.catalina.bottle.tar.gz
==> Caveats
libxml2 is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxml2 first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxml2/bin:$PATH"' >> ~/.zshrc

For compilers to find libxml2 you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxml2/lib"
  export CPPFLAGS="-I/usr/local/opt/libxml2/include"

For pkg-config to find libxml2 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxml2/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxml2/2.9.10_2: 280 files, 10.6MB

brew install libxslt
==> Downloading https://homebrew.bintray.com/bottles/libxslt-1.1.34.catalina.bottle.tar.gz
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/cbadecf3186f45754220dff4cbdfbb576882a211d615b52249a4c9d8ba4d7c3a?response-content-disposition=attachment%3Bfil
######################################################################## 100.0%
==> Pouring libxslt-1.1.34.catalina.bottle.tar.gz
==> Caveats
To allow the nokogiri gem to link against this libxslt run:
  gem install nokogiri -- --with-xslt-dir=/usr/local/opt/libxslt

libxslt is keg-only, which means it was not symlinked into /usr/local,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libxslt first in your PATH run:
  echo 'export PATH="/usr/local/opt/libxslt/bin:$PATH"' >> ~/.zshrc

For compilers to find libxslt you may need to set:
  export LDFLAGS="-L/usr/local/opt/libxslt/lib"
  export CPPFLAGS="-I/usr/local/opt/libxslt/include"

For pkg-config to find libxslt you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/libxslt/lib/pkgconfig"

==> Summary
🍺  /usr/local/Cellar/libxslt/1.1.34: 136 files, 2.8MB

І я використовував ці каталоги під час налаштування пакета для nokogiri

bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt

Підводячи підсумок, я виконав ці кроки

gem uninstall nokogiri libxml-ruby
brew update
brew uninstall libxml2
brew install libxml2
brew install libxslt
bundle config build.nokogiri --with-xml2-include=/usr/local/opt/libxml2/include --with-xml2-lib=/usr/local/opt/libxml2/lib --with-xslt-dir=/usr/local/opt/libxslt
bundle install
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.