3

我使用通过 RVM 安装的 ruby​​ 2.0.0 在我的工作站上运行 Ubuntu 13.04。

$ aptitude show libxml2

Package: libxml2
State: installed Automatically instlled: no Multi-Arch: same Version: 2.9.0+dfsg1-4ubuntu4.1

$ aptitude show libxml2-dev

Package: libxml2-dev
State: installed Automatically installed: no Multi-Arch: same Version: 2.9.0+dfsg1-4ubuntu4.1

$ aptitude show libxslt-dev

Package: libxslt1-dev
State: installed Automatically installed: no Version: 1.1.27-1ubuntu2 Priority: optional

$ nokogiri -v

WARNING: Nokogiri was built against LibXML version 2.9.0, but has dynamically loaded 2.8.0 # Nokogiri (1.6.0) --- warnings: - Nokogiri was built against LibXML version 2.9.0, but has dynamically loaded 2.8.0 nokogiri: 1.6.0 ruby: version: 2.0.0 platform: x86_64-linux description: ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux] engine: ruby libxml: binding: extension source: packaged libxml2_path: /home/pb/.rvm/gems/ruby-2.0.0-p195/gems/nokogiri-1.6.0/ports/x86_64-linux-gnu/libxml2/2.8.0 libxslt_path: /home/pb/.rvm/gems/ruby-2.0.0-p195/gems/nokogiri-1.6.0/ports/x86_64-linux-gnu/libxslt/1.1.26 compiled: 2.9.0 loaded: 2.8.0

我使用命令安装了 nokogiri,因为它使用的是 libxml2 版本 2.8.0,但我不确定它从哪里获取,因为只有 libxml2 是通过 apt 安装的。

gem install nokogiri -- --with-xml2-include=/usr/include/libxml2/libxml --with-xslt-dir=/usr/include/libxslt

当我运行我的应用程序时,我收到以下错误:

/home/pb/.rvm/rubies/ruby-2.0.0-p195/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in require': /home/pb/.rvm/gems/ruby-2.0.0-p195/gems/nokogiri-1.6.0/ports/x86_64-linux-gnu/libxml2/2.8.0/lib/libxml2.so.2: versionLIBXML2_2.9.0' not found (required by /home/pb/.rvm/gems/ruby-2.0.0-p195/gems/libxml-ruby-2.6.0/lib/libxml_ruby.so) - /home/pb/.rvm/gems/ruby-2.0.0-p195/gems/libxml-ruby-2.6.0/lib/libxml_ruby.so (LoadError)

谁能告诉我如何摆脱 libxml2 2.8.0 版?

谢谢

4

4 回答 4

3

Nokogiri 默认使用自己的版本libxml。可能是因为 Mac OS 提供了 2001 年的 libxml 版本(!),而旧库不提供 Nokogiri 所依赖的功能。但是,这可能会导致保持最新的系统出现问题。要解决这个问题,您需要针对您的操作系统提供的库构建 Nokogiri。

这可能是这样的,它来自 Arch Linux:

gem install nokogiri -- \
  --with-xml2-include=/usr/include/libxml2/libxml \
  --with-xml2-lib=/usr/lib \
  --with-xslt-include=/usr/include/libxslt \
  --with-xslt-lib=/usr/lib

如果使用 Ubuntu 或 Fedora 等发行版,您可能需要安装开发包。它应该在 Ubuntu 上libxml2-devlibxslt1-dev但如果我错了,请纠正我。

于 2013-11-12T02:14:32.350 回答
2

最终,这是 14.04 唯一对我有用的东西

gem uninstall nokogiri
NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install # or use gem install instead
于 2014-08-22T18:49:36.897 回答
0

在研究我自己的问题时遇到了你的问题。看起来,有一段时间,nokogiri 团队在 gem 安装时覆盖了 libxml 的系统安装,如以下评论所示:https ://github.com/sparklemotion/nokogiri/issues/829#issuecomment-16877522 。不确定这是否对您有帮助,但它似乎相关。也许新版本的 Nokogiri 已经准备就绪。

于 2013-08-16T18:54:39.227 回答
0

尝试使用系统库重新安装它。

gem install nokogiri -v 1.6.5 -- --use-system-libraries

于 2020-01-09T12:40:51.517 回答