Пользователь 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"
Надеемся на эту помощь