windows - 如何在 Windows 上使用 Jruby 的 nokogiri?

标签 windows jruby nokogiri libxml2

尝试在 Windows 7 上将 Nokogiri 与 Jruby 结合使用时出现以下错误

D:\code\h4>jruby -e "require 'rubygems'; require 'nokogiri'"
D:/jruby-1.3.1/bin/../lib/ruby/1.8/ffi/library.rb:18:in `ffi_lib': Could not ope
n any of [xml2, xslt, exslt] (LoadError)
        from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri/ffi/libxml.rb:5
        from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri/ffi/libxml.rb:31:in `require'
        from D:/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_requir
e.rb:31:in `require'
        from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri.rb:10
        from D:/jruby-1.3.1/lib/ruby/gems/1.8/gems/nokogiri-1.3.3-java/lib/nokog
iri.rb:36:in `require'
        from D:/jruby-1.3.1/bin/../lib/ruby/site_ruby/1.8/rubygems/custom_requir
e.rb:36:in `require'
        from -e:1

似乎是 Jruby 的 native 扩展 (libxml2) 不兼容的问题,但是我发现了 workaround here ,但找不到 libexslt.so 并且不确定将它放在哪里。有没有人有使用jruby+windows+nokogiri+libexslt的成功经验?时间差

最佳答案

您找到的变通方法适用于 UNIX 系统; .so 文件是一个可加载模块,类似于 Windows 中的 DLL。而且您不能在 Windows 中进行软链接(soft link)(ln -s 命令),因此这不适用于您的情况。

尽管如此,您确实遇到了同样的问题,即 nokogiri 无法找到您的 libxml2、libxslt 和 libexslt 库。由于我不使用 JRuby 或 nokogiri,我真的不确定它是如何工作的,但我最好的猜测是:

很可能,您需要 libxml2 的 Windows 二进制文件 (DLL)和 libxslt最低限度;可能需要其他相关的 Windows 二进制文件,可在 same place 获得。 .您需要将 DLL 安装在您的路径中的某处,或者更好的是与您的 JRuby 可执行文件安装在同一目录中(看起来像“D:/jruby-1.3.1/bin”)。 (如果这不起作用,也许 libxmlj 等 Java 原生形式的库可能会起作用,但我对此表示怀疑——您可能需要 Windows 原生的库。)

我希望这会让您踏上工作之路。

关于windows - 如何在 Windows 上使用 Jruby 的 nokogiri?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448512/

相关文章:

xpath - 返回全文元素(包括子元素/后代元素)

html - 如何使用 Nokogiri 从标签中提取文本

windows - 是否也可以在 Windows 的 ubuntu 中使用为特定操作系统创建的虚拟机?

将 Java 与 Ruby 结合使用时出现 java.lang.NullPointerException

jruby - 在 Jruby 中将 Monit 与 Puma 一起使用

linux - 为什么 JRuby script.rb > out.txt 不捕获 Java 错误?

html - 计算 CSS 类的出现次数

windows - 在 windows 上交叉编译 linux

c++ - 可以从外部进程移动/调整窗口大小 [C++/Windows]

.net - 取消按钮需要第二次按下