我正在尝试在Windows上开发我的C#/ C ++应用程序。
它的一小部分,FooLib,是用C ++编写的,它是从C#中获取性能的。 FooLib不使用系统调用,只使用标准C ++功能。它导出一个函数,声明为:
extern "C" __declspec(dllexport) void Foo(float*, int, float*);
它是用Visual C ++编译的。我尝试使用Windows编译的FooLib.dll在mono下运行应用程序,但是dll加载(DllImport)失败了:
Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[])
那么,我该怎么办?
答案 0 :(得分:2)
你需要在Linux上重新编译你的库,你会得到一个foolib.so。然后你必须创建一个DllMap(check this link),这样你就不必在C#代码中为Linux指定一个* .so库名,而在Windows中指定一个单独的* .dll - 这只是一种方便的方法根据操作系统映射库名称。
答案 1 :(得分:0)
自动化本机绑定的一个非常酷的工具是SWIG。 http://www.swig.org/
同意第1条评论。您的.NET代码应该在Linux上运行良好,无需重新编译,但您的本机调用需要进行本机编译。