Пользователь Mac и получение ВНИМАНИЕ: Nokogiri был построен против LibXML версии 2.7.8, но динамически загружал 2.7.3 - PullRequest
82 голосов
/ 23 июля 2011

Я провел все виды исследований и перепробовал много разных вещей. Я знаю, что на этот вопрос отвечали много раз, но ни одно из предложенных решений не работает для меня.

После обновления до 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?

Ответы [ 15 ]

96 голосов
/ 02 февраля 2013

Если вы установили Nokogiri с gem install nokogiri, вы можете разрешить это предупреждение, запустив gem pristine nokogiri, чтобы перекомпилировать расширение C драгоценного камня.

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

58 голосов
/ 06 июня 2012

Чтобы это исправить, если вы используете homebrew и bundler, добавьте 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

Если вы не используете bundler, вместо этого выполните следующие команды:

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, загруженной гемами, которая не указала какую библиотеку загружать.

39 голосов
/ 20 октября 2011

Я провел большую часть утра, работая над этим предупреждением. Это исправление для людей, использующих 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 (не /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. Перезагрузитесь и все будет хорошо.

27 голосов
/ 25 мая 2012

У меня ничего не получалось.

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

Вот что сработало:

  • brew uninstall libxml2 (если ранее установлено)
  • gem uninstall nokogiri
  • gem install nokogiri
  • brew install libxml2 (необязательно)
15 голосов
/ 31 июля 2012

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

gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri
9 голосов
/ 11 июля 2013

В соответствии с комментарием от patrickmcgraw выше, простое размещение nokogiri как первой записи в моем Gemfile сработало для меня Я помещаю это как отдельный ответ, потому что оригинальный комментарий был похоронен.

source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...
4 голосов
/ 21 марта 2015

Похоже, вы обновили системные библиотеки после установки гема, поэтому вам нужно обновить Nokogiri. Чтобы использовать текущую версию библиотеки:

 gem install nokogiri -- --use-system-libraries
4 голосов
/ 03 октября 2011

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

2 голосов
/ 28 июля 2011

У меня была похожая проблема, и я решил ее следующим образом:

В моем случае у меня установлен RVM, и у меня были наборы гемов @global и @project. У них обоих был установлен нокогири, а у одного - с другим libxml.

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

Надеюсь, это поможет ..

1 голос
/ 11 апреля 2013

gem install libxml-ruby мне помогает

...