0

在 Windows 上开发后,我试图在 Linux 上运行我的 C#/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,然后加载它?
  • 还有什么?
4

2 回答 2

2

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

于 2009-10-22T18:43:33.537 回答
0

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

同意第一条评论。您的 .NET 代码应该可以在 Linux 上正常运行而无需重新编译,但是您的本机调用需要进行本机编译。

于 2009-10-23T12:12:51.000 回答