Windows で開発した C#/C++ アプリを Linux で実行しようとしています。
その一部である FooLib は、パフォーマンスのために C# からピンボークされた C++ で記述されています。FooLib はシステム コールを使用せず、標準の C++ 機能のみを使用します。次のように宣言された単一の関数をエクスポートします。
extern "C" __declspec(dllexport) void Foo(float*, int, float*);
Visual C++ でコンパイルされています。Windows でコンパイルされた FooLib.dll を使用して mono でアプリを実行しようとしましたが、dll の読み込み (DllImport) が次のエラーで失敗しました。
Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[])
それで、私は何をすべきですか?
- 何らかの方法でエクスポート宣言を変更しますか?
- Linux で gcc を使用して .so ライブラリにコンパイルし、それをロードしますか?
- Linuxでgccを使用して.dllにクロスコンパイルしてからロードしますか?
- 他の何か?