2

int MyFunc()我有适用于 Linux 和 Windows 的导出方法的 C++ 共享库。

从 C# 中,我MyFunc使用以下签名调用。

[DllImport(@"__Internal", CharSet = CharSet.Ansi, EntryPoint = "MyFunc")]
static extern unsafe int MyFunc();
// Later I'm using :
MyFunc();

此代码在 Windows 上运行良好,但在 linux 内部这会引发异常EntryPointNotFound

我已经用 -rdynamic 选项编译了我的 C++ 库,我可以看到 MyFunc 被导出为带有 nm 的 D 标志,但这也对我没有帮助。

如果我简单地更改DllImport(@"__Internal"DllImport(@"mys.so"then 将在 linux 上正常工作,但我必须DllImport(@"mys.dll"在 Windows 中使用这会破坏代码交叉兼容功能。
所以我想避免这种情况。

我看不出有任何错误说明为什么__Internal不能在 Linux 上运行。
请注意,我使用的是单声道。

知道为什么这在 Linux 上不起作用吗?

4

1 回答 1

5

您可以在 windows 和 linux 上使用它:

[DllImport ("mys")]

将根据平台添加适当的扩展(这适用于 .NET 和单声道)。

于 2013-03-26T18:05:03.640 回答