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

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

После перехода на 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?

Ответ 1

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

Ответ 2

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

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

Ответ 3

Чтобы исправить это, если вы используете 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 first, чтобы заставить приложение загружать динамическую библиотеку libxml2 вместо более старой версии libxml2, загруженной драгоценными камнями, которая не указала, какую библиотеку загружать.

Ответ 4

Ничего из этого не сработало для меня.

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

У меня была аналогичная проблема, и я решил именно так:

В моем случае у меня установлен RVM, и у меня были комплекты @global и @project. Оба они установили nokogiri, и один из них построил с помощью другого libxml.

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

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

Ответ 9

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

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

Ответ 10

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: Я запускаю Mountain Lion с помощью brew и bundler.

Ответ 11

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

Ответ 12

У меня на самом деле было 2 версии libxml, один из исходного, один из RPM.

Следующее - мое полное решение

Я удалил источник (из исходного каталога)

sudo make uninstall

Удалить пакеты

rm -rf ~/.bundle ~/.bundler

Обновлен LD (возможно, это нужно сделать как root, а не sudo)

sudo ldconfig

Затем переустановите пакет

bundle install

Ответ 13

Просто наткнулся на это сам (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 system libxml2 (загружаемая при загрузке), независимо от того, какой libxml2 Nokogiri был создан против".

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

Ответ 14

ОС: Maverick 10.9.3

Ruby 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"

Надеемся на эту помощь