从 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.
它不仅仅是一个充满符号的文件。它也是将要执行的代码。该代码是特定于平台的。
我在网上找到了很多关于从 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.
它不仅仅是一个充满符号的文件。它也是将要执行的代码。该代码是特定于平台的。