是否可以将Ruby FFI与G-WAN一起使用

时间:2013-07-23 03:16:49

标签: ruby ffi g-wan

问题是从Ruby访问G-WAN C API

所以我尝试使用FFI,但是gwan没有任何库,当我试图加载二进制文件时,它显示:

/home/asd/.gem/ruby/2.0.0/gems/ffi-1.9.0/lib/ffi/library.rb:123:in `block in ffi_lib': Could not open library '/home/asd/bin/gwan_linux32-bit/gwan': /home/asd/bin/gwan_linux32-bit/gwan: cannot dynamically load executable (LoadError)
    from /home/asd/.gem/ruby/2.0.0/gems/ffi-1.9.0/lib/ffi/library.rb:90:in `map'
    from /home/asd/.gem/ruby/2.0.0/gems/ffi-1.9.0/lib/ffi/library.rb:90:in `ffi_lib'
    from /home/asd/bin/gwan_linux32-bit/127.0.0.1_8081/#127.0.0.1/csp/test.rb:26:in `<module:MyLibrary>'
    from /home/asd/bin/gwan_linux32-bit/127.0.0.1_8081/#127.0.0.1/csp/test.rb:24:in `<main>'

因为,显然,它不是库,而是可执行二进制文件

起初我认为我应该为Ruby创建一个C扩展来访问G-WAN API,但是想到它,如果我们没有.o链接(仅提供.h),它也会失败,对?

所以..是否有可能使Ruby的FFI从.h加载而不是从dll加载?

1 个答案:

答案 0 :(得分:0)

共享库中不提供G-WAN API:它由G-WAN可执行文件提供。

为了让Ruby受益于G-WAN API,这里无法替代集成Ruby运行时的G-WAN,就像它为C#,Java或Scala所做的那样。

尝试查找相关信息(有关如何从C调用Ruby和Ruby调用C的代码示例,以及如何在C和Ruby之间传递数据结构)并在gwan.ch向我们添加一行。

不要忘记检查这些资源是否是线程安全的,因为G-WAN是一个多线程应用程序。