c# - 使用 Visual Studio 构建 C++ DLL - Linux 上的 PInvoke

标签 c# c++ linux mono pinvoke

这就是我想要实现的目标:在 Visual Studio 上构建 native C++ DLL 库,并通过 C# 应用程序中的 PInvoke 在 Ubuntu Linux\Mono 上调用它的方法。简化代码:

[DllImport("MyLib")]
static extern int MyFunction();

static void Main(string[] args)
{
  int result = MyFunction();
}

在 Windows 上,它就像一个魅力。 我在单声道上运行此示例应用程序,但出现错误:DllNotFoundException。当我启用单声道调试 (MONO_LOG_LEVEL="debug"mono MyApp.exe) 时,我可以看到找到了这个 DLL,但由于错误而无法加载:“无效的 ELF header ”。我想 DLL 必须用一些特殊的标志编译,所以 linux 可以识别它。如何做到这一点?

最佳答案

随 Visual Studio 提供的 C++ 编译器面向 Windows。您正在尝试在 Linux 上执行代码,因此您需要使用针对 Linux 的编译器来编译您的代码。您根本无法在 Linux 上以 native 方式执行 Windows DLL。

您的解决方案是将源代码带到 Linux C++ 编译器和 Linux 共享对象库编译器。

关于c# - 使用 Visual Studio 构建 C++ DLL - Linux 上的 PInvoke,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21244268/

相关文章:

c# - 如何在 .NET Framework 中创建 gRPC 客户端?

c++ - 将字节 vector 转换为浮点 vector

c++ - 将 QProgressBar 设置为从逻辑层更新的正确方法是什么?

c++ - 优化 c++/gcc 中的模板编译时间

linux - SystemTap 支持用户空间应用程序

c# - 为 ASP.Net Web API 生成 JSON 模式

c# - 使用 StackExchange.Redis 连接到 Azure Redis 缓存时出错

c# - 如何在类库中订阅应用程序关闭事件

c++ - 返回不准确的鼠标坐标

linux - 对 Node JS 中的 NPM 进行故障排除