我有一个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'的函数。
我仍然不确定自己是否走上正轨,但还有什么我可以尝试的吗?或者这种方法是死路一条?