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"、Linuxで問題なく動作しますDllImport(@"mys.dll"が、Windowsで使用する必要があります。これにより、コードの相互互換性が失われます。
だから私はこれを避けたい。

__InternalLinuxで動作しない理由に間違いはありません。
私はモノラルを使用していることに注意してください。

これがLinuxで機能しない理由はありますか?

4

1 に答える 1

5

これは、WindowsとLinuxの両方で使用できます。

[DllImport ("mys")]

プラットフォームに応じて適切な拡張子が追加されます(これは.NETとmonoの両方で機能します)。

于 2013-03-26T18:05:03.640 に答える