我可以为 linux 动态 link 一个二进制构建来与 .Net 和 Mono 一起工作吗

Can I dynamically link a binary build for linux to work with .Net and Mono

我正在尝试为 Raspberry pi 构建一个使用 SPI 的 .Net 应用程序。 Windows 10 IoT 的 SPI 驱动程序速度很慢。因此我要使用 Mono 将项目迁移到 Linux(因为我的代码已经用 .Net 编写)

因为我在 Windows IoT 上遇到 SPI 速度问题,所以我正在考虑用 C++ 编写 SPI 代码,然后 link 将它们动态地写入 .Net 应用程序。但是我很难在网上找到有关如何执行此操作的信息。这里有人知道吗?

总结一下这个问题。我想 运行 我的 .Net 应用程序在 Linux 上使用单声道和动态 link 我将用 c++ 编写的库。

感谢任何帮助!

是的,你可以。只需确保您的 C++ 编译的 .so 可以在系统上找到(也许通过确保 LD_LIBRARY_PATH env 变量可以找到它)。然后在您的 C# 代码中:

[DllImport("LibraryName")]
private static extern void Foo();

// Call Foo() from C#

在您的 C++ 代码中:

extern "C" void Foo()
{
    // do C++ stuff
}

在运行时,当您从 C# 调用 Foo() 时,mono 将加载 .so 并找到该函数并调用它。

所有血淋淋的细节都在这里:http://www.mono-project.com/docs/advanced/pinvoke/