2009-10-16 23 views
14

Es gibt mehrere Möglichkeiten, Matlab in C C++ aufzurufen und C C++ in Matlab aufzurufen. Während ich versuche, sie hier aufzulisten, weisen Sie bitte darauf hin, wenn ich etwas vermisse.Matlab in C C++ und C C++ in Matlab

Um C C++ in Matlab aufzurufen, gibt es auch zwei Methoden. Die erste besteht darin, Funktionen in C shared libraries aufzurufen. Die zweite besteht darin, C C++ - Code in binäre MEX-Dateien zu erstellen, die von der MATLAB-Befehlszeile aus aufgerufen werden. Für die erste Methode sind die C-shared-Bibliotheken nur allgemeine, d. H. Ohne Änderung ihres C-Codes für Matlab und kompiliert von allgemeinem C-Compiler wie gcc?

Um Matlab-Code in C C++ aufzurufen, gibt es zwei Methoden. Die erste ist Matlab-Engine. Die zweite Möglichkeit besteht darin, MATLAB Compiler mcc zu verwenden, um gemeinsam genutzte C- oder C++ - Bibliotheken aus Ihrem MATLAB-Code zu erstellen.

Neben Matlab und C kann C++ über das Schreiben und Lesen von Daten zu und von einer Datei (z. B. Matte-Datei, Textdatei) kommunizieren.

Haben Sie mehr als einen Weg, um jedes der Ziele hier zu erreichen, können Sie mir sagen, welche Fälle am besten für die Verwendung von welchen sind? d. h. Aufruf von Funktionen in C shared libraries VS Erstellen von C C++ - Code in binäre MEX-Dateien, Matlab Engine VS kompilieren Matlab-Code in C C++ shared library.

Danke und Gruß!

+0

Es gibt keine Sprache namens C/C++. Die Schnittstelle zwischen C und X wird viel einfacher sein als die Schnittstelle zwischen C++ und X. –

+11

Sie wissen, was ich meine, "C und/oder C++" – Tim

+1

Die C Antworten werden viel kürzer sein als die C++ Antworten (und in einigen Fällen , die C++ Antworten werden "Wrapper in C schreiben"). Um was geht es dir mehr? –

Antwort

8

Ich habe nur Erfahrung mit dem Aufrufen von C oder C++ Funktionen von MATLAB. Es sieht für mich so aus, als ob der einzige Unterschied zwischen dem Aufruf von Funktionen in einer gemeinsamen Bibliothek und dem Aufruf von Funktionen aus einer MEX-Datei darin besteht, dass man die Funktion mit 'callib' aufrufen muss, was eine Kommandozeilen-Funktion ist und MEX-Funktionen erlauben Sie rufen Funktionen auf, als ob sie eingebaute Funktionen sind, so dass die Schnittstelle ein wenig sauberer ist.

Mein Vorschlag ist, MEX-Dateien verwenden, wenn

  • Sie verwenden C++ (Sie einen Wrapper schreiben müssen möglicherweise eine C++ in einer gemeinsam genutzten Bibliothek zu benutzen)
  • Sie verwenden MATLAB als Klebstoff für eine große Anzahl von optimierten C- oder C++ - Routinen. Sie werden in der Lage sein, sie sauber zu nennen.

Verwenden gemeinsam genutzte Bibliothek, wenn

  • Sie bereits eine bestehende C-Bibliothek, die ohne Modifikation verwendet werden kann.
  • Sie benötigen nur eine kleine Anzahl von Aufrufen von C-Funktionen.

Wirklich, es kommt auf die Schnittstelle. Ich persönlich bevorzuge die MEX-Dateiroute, weil sie die sauberste Schnittstelle von MATLAB zu Ihrer C- oder C++ - Funktion bietet. Sie können es wie nur eine andere Funktion mit Standard-MATLAB-Typen nennen. Mit einer gemeinsam genutzten Bibliothek, können Sie einige Datenformatierung tun müssen, bevor die Bibliotheksfunktion

3

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 nicht wirklich etwas Besonderes; Es ist möglich, verschiedene Compiler zu verwenden. Siehe link Liste der unterstützten Compiler. Dies beinhaltet nicht gcc, aber MS Visual Studio ist enthalten. Beim Verknüpfen mit den mitgelieferten Bibliotheken treten Probleme auf.

Grundsätzlich: Matlab von C aufrufen ist etwas, das Sie tun würden, wenn Sie eine enge Schnittstelle benötigen; Wenn Sie beispielsweise 2 Werkzeuge synchronisieren möchten oder Ihre S-Funktion (Simulink) zusätzliche Informationen benötigt. Aber eine solche Datei wird wahrscheinlich von Matlab/Simulink aufgerufen.

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

Die Wahl zwischen C und C++ liegt bei Ihnen; Wenn Sie von einem leeren Blatt ausgehen, schlage ich vor, dass Sie C++ verwenden; Sie müssen nicht die vollständige Funktionalität verwenden, aber es ermöglicht mehr Freiheit. Außerdem sind heutzutage mehr Bibliotheken für C++ verfügbar.

C ist die Sprache der Wahl, wenn Sie in sehr unterschiedliche Umgebungen migrieren müssen; d.h. zum Beispiel C zu DSPs kompilieren. Oder wenn Sie in C Legacy-Code haben, um von beginnen. Mischen von C und C++ ist möglich, aber ein bisschen schwerfällig; Ich bin sicher, dass Sie zu diesem Thema Themen zu StackOverflow finden werden.

2

Schulungsvideos Aufruf über C++ in Matlab und Matlab in C++ (Persische Sprache)

Inhalt:

1 - Intro

  • Introduction.wmv [02.00, 1.2 MB, 800x600]

2 - C++ in Matlab

  • Grund concepts.wmv [9.04, 5.9 MB, 800x600]
  • Konfiguration und ein einfaches Projekt [08:25, 13 MB, 800x600]
  • Samples [2.17, 2.7 MB, 800x600]
  • Ausprüfen [2.38, 3.4 MB, 800x600]

3 - Matlab in C++

  • Matlab C++ Geteilt DLL.wmv [5.42, 6.8 MB, 800x600]
  • mit Matlab von vC++ [10.52, 14,2 MB, 800x600]

Watch or Download from Google

Download from 4Shared