从 C# (Windows) 调用 C 函数 (Linux)

Calling C function (Linux) from C# (Windows)

我在网上找到了很多关于从 C# 调用 C 函数的信息。简单的解决方案是创建一个 .so 文件并使用 C# 中的 DllImport 函数导入它。

using System;

using System.Runtime.InteropServices;

public class Tester 
{
        [DllImport("libtest.so", EntryPoint="cfunction")]

        static extern void cfunction(string message);

        public static void Main(string[] args)
        {

                cfunction("Hello World C# => C++");
        }
}

我的问题是,我的 .so 文件是在 Linux 环境中创建的吗?我可以只将 .so 文件复制到 Windows 环境并让 C# 使用它而不会出现任何问题吗?我认为这无关紧要,因为 .so 是一个动态库,并且充满了不依赖于创建它的平台的符号。

感谢您的帮助。

does it matter if my .so file was created in a Linux environment ?

是的,这很重要。

共享对象 (so) 文件由链接器生成并包含代码。它们是特定于平台的。即使是两个不同CPU上的Linux运行两个版本也很有可能无法使用同一个.so文件

Can I just copy the .so file to a Windows environment and have C# use it without any issues ?

A Windows OS 不会使用 .so 文件。它需要 .dll 文件,它们是完全不同的格式(通常需要完全不同的代码来完成相同的工作)。

I believe it shouldn't matter because .so is a dynamic library and is filled with symbols not dependent on the platform it's created on.

它不仅仅是一个充满符号的文件。它也是将要执行的代码。该代码是特定于平台的。