如何在Ubuntu上修复Nokogiri?

问题描述 投票:2回答:4

我在通过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,但是我不确定从哪里获取它,因为仅通过apt安装了libxml2。

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?

谢谢

ruby xml ubuntu nokogiri
4个回答
3
投票

Nokogiri默认使用其自己的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: version版本。可能是因为Mac OS提供了2001年发行的libxml版本(!),而旧的库没有提供Nokogiri所依赖的功能。但是,这可能会导致系统保持最新状态。要解决此问题,您需要针对操作系统提供的库构建Nokogiri。

也许是这样,来自Arch Linux:

libxml

如果使用Ubuntu或Fedora等发行版,则可能需要安装开发包。在Ubuntu上应该是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 libxml2-dev,但是如果我错了,请纠正我。


2
投票

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

libxslt1-dev

0
投票

整个问题都在研究我自己的问题。一段时间以来,nokogiri团队似乎在gem安装时覆盖了libxml的系统安装,如以下注释所示:gem uninstall nokogiri NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install # or use gem install instead 。不知道这是否对您有帮助,但似乎很相关。也许已经有了新版本的Nokogiri。


© www.soinside.com 2019 - 2024. All rights reserved.