2009-10-22 81 views
0

我试图在Windows上开发它之后,在Linux上运行我的C#/ C++应用程序。如何从Mono应用程序使用C++模块

它的一小部分FooLib是用C++编写的C++编写的,用于提高性能。 FooLib不使用系统调用,只使用标准的C++功能。它导出一个函数,声明为:

extern "C" __declspec(dllexport) void Foo(float*, int, float*); 

它用Visual C++编译。我试图与Windows编译FooLib.dll下单运行的应用程序,但该dll加载(的DllImport)与失败:

Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[]) 

所以,我应该怎么办?

  • 以某种方式更改导出声明?
  • 用Linux上的gcc编译成.so库,然后加载?
  • 在Linux上用gcc将它交叉编译成一个.dll文件,然后加载?
  • 还有别的吗?

回答

2

你需要在Linux上重新编译你的库,你会得到一个foolib.so。然后,您必须创建一个DllMap(check this link),以便您不必在C#代码中为Linux指定* .so库名称,为Windows指定一个单独的* .dll - 这只是一种方便地映射库名称的方法取决于操作系统。

0

自动绑定的一个非常酷的工具是SWIG。 http://www.swig.org/

同意第一条评论。您的.NET代码应该在没有任何重新编译的情况下在Linux上正常运行,但您的本地调用需要本地编译。

相关问题