可以从Ruby调用独立的基于Mono的DLL吗?

时间:2014-11-20 14:25:31

标签: c# ruby-on-rails ruby dll mono

我有一个C#类库,它包含一些与光栅处理相关的专门数学功能(它使用一些异步技术来加速处理)。我有一个项目,我的客户希望在Linux机器上使用Ruby on Rails(RoR)编写,这可以从使用这个库中受益(我宁愿不将它移植到Ruby或C ++)。

我的问题的第一部分是:

可以从我的C#DLL创建一个独立的基于Mono的DLL吗? (通过独立我的意思是,可以使用DLL而不安装单声道(所有必需的库都将包含在单个DLL中)?

第二部分,如果对第1部分的回答为“是”,可以从Ruby调用这个独立的基于单声道的DLL吗?

EDIT 11/22/2014

我可能取得了一些进展。我使用

创建了一个* .so文件
mono --aot -O=all dlltest.dll

(显然我现在已经在我的Ubuntu测试VM上安装了Mono。)这导致了dlltest.so,然后我在/ usr / lib中添加了一个符号链接。

我的测试Ruby脚本的代码是:

require 'ffi'

module CsharpTest
    extend FFI::Library
    ffi_lib 'dlltest.so'
    attach_function :Hello, [], :string
end

ret_str = CsharpTest.Hello()
puts ret_str

请注意,我的简单C#类是:

using Systems;
namespace DllTest
{
    public static class MyClass
    {
        public static string Hello()
        {
            return "Hello World";
        }
    }
}

当我运行测试Ruby脚本(ruby test.rb)时,我收到以下错误:

  

....:'attach_function':[dlltest.so]中找不到函数'Hello'(FFI :: NotFoundError)

使用'nm -Ca dlltest.so'列出了可用的功能。其中一个是'0000000000001010 t DllTest_MyClass_Hello'。如果我使用此标签而不是'Hello',我会收到类似的错误。

另请注意,'nm -D --defined-only dlltest.so'不会列出任何带有'Hello'的函数。

我仍然不确定自己是否走上正轨,但还有什么我可以尝试的吗?或者这种方法是死路一条?

0 个答案:

没有答案