Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以从.NETCore调用linux平台上的共享库(.so)?_C#_.net_Shared Libraries_Cross Platform_.net Core - Fatal编程技术网

C# 是否可以从.NETCore调用linux平台上的共享库(.so)?

C# 是否可以从.NETCore调用linux平台上的共享库(.so)?,c#,.net,shared-libraries,cross-platform,.net-core,C#,.net,Shared Libraries,Cross Platform,.net Core,我知道.NET核心的目标是跨平台开发,但我正在寻找向后兼容性。如果我有一个可用的linux库(可能是遗留的),并且我希望它的函数可以从linux平台的.NET核心应用程序调用。可能吗 我不是说ASP.NET core,我需要它作为桌面应用程序。是: 话虽如此,我承认我还没有真正尝试过。我在Mono上用了很多,值得一读的是,他们关于这方面的文档:。。。因为.NETCore似乎采取了大致相同的方法(例如:为p调用的库保留文件扩展名,这样系统就可以负责链接到正确的版本等等) 例如.net内核本身是如何

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

我不是说ASP.NET core,我需要它作为桌面应用程序。

是:

话虽如此,我承认我还没有真正尝试过。我在Mono上用了很多,值得一读的是,他们关于这方面的文档:。。。因为.NETCore似乎采取了大致相同的方法(例如:为p调用的库保留文件扩展名,这样系统就可以负责链接到正确的版本等等)

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

const string LIBC = "libc";

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

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

.NETCore本身在Linux上使用了很多这样的库。您可以查看其源代码,了解如何在那里制作PInvoke吗?另请参见: