ruby FFI不会在Windows上加载DLL

时间:2014-08-24 08:58:16

标签: ruby windows dll ffi

我正在编写一个小型跨平台C库来进行几何计算。我想在ruby中使用这个库,因为它比原生ruby快五倍。

它在Linux(Fedora 20)上工作正常,但在Windows 8上执行相同操作时,它会因以下错误而失败:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/ffi-1.9.3-x86-mingw32/lib/ffi/library.rb:133:in `block in ffi_lib': Could not open library 'libgeom': x▒K. (LoadError) Could not open library 'libgeom.dll':L
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ffi-1.9.3-x86-mingw32/lib/ffi/library.rb:100:in `map'
        from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ffi-1.9.3-x86-mingw32/lib/ffi/library.rb:100:in `ffi_lib'
        from C:/rubytest/geom.rb:6:in `<module:Geom>'
        from C:/rubytest/geom.rb:1:in `<top (required)>'
        from main.rb:2:in `require_relative'
        from main.rb:2:in `<main>'

在文件geom.rb中,我有以下内容:

module Geom
    extend FFI::Library
    ffi_lib "libgeom"

    attach_function :point_in_rectangle, [:float, :float, :float, :float, :float, :float], :int
    # etc.
end

在当前目录中我有共享库(Linux上的libgeom.so,Windows上的libgeom.dll)

我正在使用Cygwin和以下命令编译共享库:

gcc -Wall -shared geom.c -o libgeom.dll

我已尝试使用库的完整路径,并尝试将当前目录添加到PATH,但它没有任何区别。

我正在使用ruby版本:

ruby 1.9.3p545 (2014-02-24) [i386-mingw32]

我是ruby的新手,但对Linux上的直接成功非常满意。现在我只想让它在Windows上运行。

你能建议任何解决方法吗?

这是32位还是64位的问题?

1 个答案:

答案 0 :(得分:1)

我自己弄清楚了: - )

原因是我的ruby版本是32位,而我的Cygwin是64位。

我现在已经删除了Cygwin并改为32位Cygwin,现在它可以了!