这就是我想要实现的目标:在 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/