Frage

Ich versuche, meine C # / C ++ Anwendung auf Linux auszuführen, nachdem es unter Windows zu entwickeln.

Ein kleiner Teil davon, FooLib, ist in C ++ geschrieben, die von C # für die Leistung pinvoked wird. FooLib verwendet keine Systemaufrufe, nur Standard C ++ Funktionalität. Es exportiert eine einzelne Funktion, erklärt wie:

extern "C" __declspec(dllexport) void Foo(float*, int, float*);

Es ist mit Visual C ++ kompiliert. Ich habe versucht, die App unter mono mit der FooLib.dll kompilierte Windows-ausgeführt wird, aber der DLL-Laden (DllImport) schlug fehl mit:

Unhandled Exception: System.DllNotFoundException:Foo(single[2],int,single[])

Also, was soll ich tun?

  • Ändern Sie den Export Erklärung in irgendeiner Weise?
  • Kompilieren Sie die Sache in eine .so-Bibliothek mit gcc unter Linux, dann, dass laden?
  • Crosscompile es in eine DLL mit gcc unter Linux, dann, dass laden?
  • Etwas anderes?
War es hilfreich?

Andere Tipps

Ein sehr cooles Tool für die Automatisierung von nativen Bindungen ist SWIG. http://www.swig.org/

mit dem ersten Kommentar Zustimmen. Ihr .NET-Code sollte auf Linux ohne recompile gut laufen, aber Ihr nativen Aufruf muss nativ kompiliert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top