Frage

Es scheint, dass es mehr Möglichkeiten Matlab in C C ++ anrufen und C C ++ in Matlab zu nennen. Während ich sie versuchen, sie hier aufzulisten, bitte darauf hin Wenn ich etwas verpassen.

C C ++ in Matlab zu nennen, gibt es auch zwei Methoden. Der erste ist der Aufruf der Funktionen in C-Bibliotheken gemeinsam genutzt. Das zweite ist C C ++ Code in binäre MEX-Dateien zu erstellen, die sich aus der MATLAB-Kommandozeile aufgerufen werden. Für die erste Methode, sind die C gemeinsam genutzte Bibliotheken sind nur allgemeiner Art, das heißt ohne Änderung ihrer C-Code für Matlab und den allgemeinen C-Compiler wie gcc kompiliert?

Um MATLAB-Code in C C ++ aufrufen, gibt es zwei Methoden zur Verfügung. Die erste ist Matlab-Engine. Das zweite ist MATLAB Compiler mcc verwenden C oder C ++ Shared Libraries von MATLAB-Code zu erstellen.

Neben MATLAB und C C ++ kann über das Schreiben und Lesen von Daten kommunizieren und von einer Datei (z.B. Datei mat, Textdatei).

mehr als eine Art und Weise zu haben hier jedes der Ziele zu erreichen, könnten Sie mir sagen, welche Fälle sind am besten für die von ihnen mit? das heißt Funktionen in C aufrufen Bibliotheken gemeinsam genutzt VS Gebäude C C ++ Code in binäre MEX-Dateien, Motor Matlab VS Matlab-Code in C C ++ Shared Library kompiliert.

Danke und Grüße!

War es hilfreich?

Lösung

Ich habe nur expreience mit C oder C ++ Funktionen von MATLAB aufrufen. Es sieht für mich wie der einzige Unterschied zwischen den Funktionen in einer gemeinsamen Bibliothek aufrufen und Funktionen aus einer MEX-Datei Aufruf ist, dass mit einer gemeinsam genutzten Bibliothek, Sie haben die Funktion mit ‚calllib‘ nennen, die eine Linientyp Funktion Befehl ist und MEX-Funktionen ermöglichen Sie funktioniert, als ob sie sind integrierte Funktionen zu nennen, so dass die Schnittstelle ein wenig sauberer ist.

ist mein Vorschlag MEX-Dateien zu verwenden, wenn

  • Sie verwenden C ++ (Sie einen Wrapper schreiben müssen möglicherweise eine C ++ in einer Shared Library)
  • Sie verwenden MATLAB als Klebstoff für eine große Anzahl von optimierten C oder C ++ Routinen. Sie wollen sie nennen sauber können.

Mit Shared Library, wenn

  • Sie haben bereits eine bestehende C-Bibliothek, die ohne Modifikation verwendet werden kann.
  • Sie benötigen nur eine geringe Anzahl von Anrufen an C-Funktionen.

Wirklich, kommt es auf die Schnittstelle. Ich persönlich bevorzuge die MEX-Datei Route, weil es die sauberste Schnittstelle von MATLAB zu Ihrem C oder C ++ Funktion bereitstellt. Sie können es wie nur mit Standard-MATLAB-Typen eine andere Funktion aufrufen. Mit einer gemeinsam genutzten Bibliothek, können Sie einige Daten zu tun haben, die Formatierung, bevor Sie die Bibliotheksfunktion aufrufen

Andere Tipps

Ich denke, die Methoden, die Sie genannt haben, richtig sind (es ist schon eine Weile her, seit ich sie benutzt habe)

Der Matlab C-Compiler ist nicht wirklich etwas Besonderes; ist es möglich, verschiedene Compiler zu verwenden. Siehe Link Liste der unterstützten Compilern. Dies gilt nicht für gcc, aber MS Visual Studio enthalten ist. Sie werden auf Probleme stoßen, wenn sie mit den mitgelieferten Bibliotheken verknüpft.

Grundsätzlich gilt: Aufruf Matlab von C ist etwas, was Sie tun würden, wenn Sie eine enge Schnittstelle benötigen; wenn Sie zum Beispiel will zwei Werkzeuge synchronisieren oder Ihre S-Funktion (Simulink) erfordert zusätzliche Informationen. Aber dann, eine solche Datei propably von Matlab / Simulink an erster Stelle genannt wird.

Der Aufruf c von Matlab ist das, was Sie tun möchten, wenn Sie Ihre eigenen S-Funktionen oder Erweiterungen schreiben in Matlab.

Die Wahl zwischen C und C ++ ist deine; wenn Sie von einem leeren Blatt beginnen Ich schlage vor, Sie verwenden C ++; Sie brauchen nicht die volle Funktionalität zu nutzen, aber es mehr Freiheit erlaubt. Auch mehr Bibliotheken sind in der Regel für C verfügbar sein ++ heute.

C ist die Sprache der Wahl, wenn Sie zu sehr unterschiedlichen Umgebungen migrieren müssen; d.h. C bis etwa DSPs zu kompilieren. Oder wenn Sie Legacy-Code in C bekommen haben zu starten aus. Mischen C und C ++ ist möglich, aber eine kann ein wenig umständlich sein; Ich bin sicher, dass Sie allein Themen auf Stackoverflow zu diesem Thema finden.

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