我做过各种研究并尝试过很多不同的事情。我知道这个问题已被多次回答,但没有一个建议的解决方案对我有用。
升级到Lion之后,我在Ruby中遇到了分段错误。我相当自信是Nokogiri。所以我通过Homebrew安装了libxml2。我跑了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?
答案 0 :(得分:95)
如果您使用gem install nokogiri
安装了Nokogiri,则可以通过运行gem pristine nokogiri
重新编译gem的C扩展来解决此警告。
如果您使用bundle install
安装了Nokogiri,则可以通过运行bundle exec gem pristine nokogiri
来解析此警告,以便在Bundler安装它的任何地方重新编译gem的C扩展。
答案 1 :(得分: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
如果您不使用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库,而不是由未能指定要加载哪个库的gem加载的旧系统版本的libxml2。
答案 2 :(得分: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
适用于通过MacPorts安装了libxml2的Snow Leopard。
使用Lion,libxml2作为引导过程的一部分加载。无论libxml2 Nokogiri指向哪个,libxml2的Lion系统默认库都将在运行时使用。 Lion使用/usr
中的libxml2.2.7.3(不是/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。
这是答案的结尾。别在这里读。
好的,你没有停止阅读......好吧......
不推荐!!!!!!
你被警告过了。您可以通过禁用/usr/lib
中的libxml2来验证Mac OSX是否正在其引导程序中加载libxml2库。做一些事情,比如将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然后停止工作。
关闭电源并重新打开电源。这次启动进入恢复模式(按住命令 - R 或按住选项然后选择恢复磁盘)。在恢复模式下,打开终端(utilities/terminal
)。在HD上安装/usr/lib
(尝试/Volumes/Macintosh\ HD/usr/lib
)并复制libxml2文件。重启,一切都会好的。
答案 3 :(得分:27)
这些都不适合我。
我使用brew安装了更高版本(2.7.8)的libxml2。这导致nokogiri编译反对它和后来的问题。解决方案,删除它,然后构建,然后根据需要安装。
这是有效的:
brew uninstall libxml2
(如果之前已安装) gem uninstall nokogiri
gem install nokogiri
brew install libxml2
(可选) 答案 4 :(得分:15)
更新到Mountain Lion后的解决方案(对我而言)要简单得多:
gem uninstall nokogiri
# (and ignore the warnings about dependencies)
gem install nokogiri
答案 5 :(得分:9)
根据上面patrickmcgraw的评论,简单地将nokogiri作为我的Gemfile中的第一个条目为我工作。我把它作为一个单独的答案,因为最初的评论已被埋没。
source 'http://rubygems.org'
gem 'nokogiri'
gem 'rails', '3.0.20'
etc...
答案 6 :(得分:4)
Bundler具有设置默认构建位置的选项。例如,通过macports安装libxml2:
$ 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上设置构建选项。
答案 7 :(得分:4)
在安装gem之后,您似乎已经更新了系统库,因此您必须更新Nokogiri。要使用当前的lib版本:
gem install nokogiri -- --use-system-libraries
答案 8 :(得分:2)
我有类似的问题,只是这样解决了:
在我的情况下,我安装了RVM,并且我有@global和@project gem集。 他们两个都安装了nokogiri,其中一个用不同的libxml构建。
重建它们(我有理由这样做)解决了这个问题。
希望这会有所帮助..
答案 9 :(得分: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
仅供参考:我正在使用brew和捆绑器运行Mountain Lion。
答案 10 :(得分:1)
gem install libxml-ruby帮助我
答案 11 :(得分:0)
我实际上安装了两个版本的libxml,一个来自源,一个来自RPM。
以下是我的完整解决方案
我卸载了源代码(来自源目录)
sudo make uninstall
删除包
rm -rf ~/.bundle ~/.bundler
更新了LD(可能必须以root身份执行此操作,而不是sudo)
sudo ldconfig
然后重新安装捆绑包
bundle install
答案 12 :(得分: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 Nokogiri。”
答案 13 :(得分:0)
OS: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"
希望这个帮助
答案 14 :(得分:0)
如果收到此消息,并且您的nokogiri已与gem来源中提供的版本过时,则只需运行bundle update nokogiri
即可获取新代码并重新编译。您的错误应该消失。
答案 15 :(得分:0)
操作系统:Catalina
警告:警告nokogiri是针对libxml 2.9.10版构建的,但已动态加载2.9.4
我遵循了Michiel de Mare steps,但是brew install 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