【问题标题】:Is it possible to call a shared library (.so) on linux platform from .NET core?是否可以从 .NET 核心调用 linux 平台上的共享库(.so)?
【发布时间】:2016-08-31 03:50:15
【问题描述】:

我了解 .NET 核心的目标是跨平台开发,但我正在寻找向后兼容性。如果我有一个可用的 linux 库(可能是旧版),并且我希望从 .NET 核心应用程序为 linux 平台调用它的函数。有可能吗?

我不是在谈论 ASP.NET 核心,我需要它用于桌面应用程序。

【问题讨论】:

标签: c# .net shared-libraries cross-platform .net-core


【解决方案1】:

是的:https://github.com/dotnet/corefx/issues/343

话虽如此,我承认我还没有真正尝试过。我已经在 Mono 上使用了它,因为它的价值,而且绝对值得阅读他们的文档:http://www.mono-project.com/docs/advanced/pinvoke/ ... 因为 .net 核心似乎采取了相同的方法(例如:省略 p 调用库的文件扩展名,以便系统可以处理链接到正确的版本等...)

例如 .net 核心本身是如何做到这一点的:

const string LIBC = "libc";

[DllImport(LIBC, EntryPoint = "getenv")]
private static extern IntPtr getenv_core(string name);

https://github.com/dotnet/corefx/blob/79d44f202e4b6d000ca6c6885a24549a55db38f1/src/System.Console/src/Interop/Interop.manual.Unix.cs

【讨论】:

    【解决方案2】:

    看看 SWIG。这是一种包装共享库的简单方法,它为您生成所有 P/Invoke 代码,并在您的 .so 库和 C# 代码之间映射任何头文件(想想结构)。我们围绕我们想要使用的 .so 库创建了一个简单的 cpp 包装器,然后让 SWIG 发挥它的魔力。我们现在有一个 C# 库,可以从我们的 .Net 代码(一个简单的控制台应用程序)调用我们的 linux 库函数。我们已经在 PI、运行 Ubuntu、CentOS 和 Debian 的 unix 主机上完成了这项工作,并取得了巨大成功。 http://www.swig.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 1970-01-01
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多