C++-Code aus MATLAB aufrufen?

Lesezeit: 2 Minuten

C Code aus MATLAB aufrufen
rlbond

Ich habe etwas Code, den ich in C++ codieren muss, da ich stark auf Vorlagen angewiesen bin. Ich möchte diesen Code aus MATLAB aufrufen: Im Grunde muss ich einige Parameter an den C++-Code übergeben und den C++-Code eine Matrix an MATLAB zurückgeben lassen. Ich habe gehört, dass dies möglich ist mit etwas namens a MEX Datei, die ich noch suche. Ich bin mir jedoch nicht sicher, was in diesen MEX-Dateien unterstützt wird. Ist alles in C++ (zB STL und Schub) unterstützt? Wie schwer ist es?

BEARBEITEN: Ich brauche keine Shared Libraries, nur Header-Zeug wie shared_ptr.

1641929103 619 C Code aus MATLAB aufrufen
rcs

Schaut euch das an Anleitung zu MEX-Dateien, insbesondere Abschnitt 25–27 für C++. Das Grundlegende STL/Schub Datenstrukturen sollten funktionieren, aber Threading mit Boost könnte ein Problem sein.
cout wird in C++ nicht wie erwartet funktionieren, mexPrintf muss stattdessen verwendet werden.

  • Ich werde aus Erfahrung etwas Vorsicht walten lassen. Wenn Sie Simulink und RTW verwenden, wird beim Kompilieren das Flag -DRT gesetzt. Einige Math-Bibliotheken von boost verwenden template. Das -DRT tötet diese Klassen. Wenn dieses Problem auftritt, ändern Sie -DRT in -DRT=RT in der Make-Datei.

    – KitsuneYMG

    23. Okt. 09 um 15:49 Uhr

Es ist sicherlich möglich, C++ MEX-Dateien zu schreiben, die STL und Boost verwenden. Im Allgemeinen sollten Sie in einer C++ MEX-Datei alles tun können, was Sie möchten. Die wichtigste praktische Einschränkung besteht darin, dass MATLAB bereits mit einer Reihe von Bibliotheken geliefert wird. Wenn Sie also eines der Boost-Teile verwenden, die eine gemeinsam genutzte Bibliothek benötigen (einige sind nur Header), müssen Sie die Version abgleichen, mit der Sie kompilieren mit diesem Versand mit MATLAB.

Zum Beispiel wird MATLAB R2009b mit Boost 1.36 ausgeliefert (Sie können dies an den Namen der Bibliotheken in /bin/ erkennen).

Die C++-Dateien werden tatsächlich von einem externen Compiler kompiliert. Benutzen mex -setup um auszuwählen, welche (Hier ist eine Liste der unterstützten Compiler). Daher sollten Ihnen nicht zu viele seltsame Dinge passieren, und Sie sollten auch nicht zu eingeschränkt sein von dem, was Sie tun können.

Ich habe letztes Jahr einige MEX-Sachen gemacht, und mein Gedächtnis ist ein bisschen eingerostet, aber Sie müssen MATLAB-Arrays mit MEX-Funktionen erstellen. Ich fand die MATLAB-Dokumentation angemessen und die ganze Erfahrung nicht zu schmerzhaft.

STL wird definitiv unterstützt. Boost wahrscheinlich noch. Der Punkt ist, solange Sie Ihre STL und BOOST auf Ihrem Computer bereitgestellt haben, sollten Sie startklar sein.

.

382380cookie-checkC++-Code aus MATLAB aufrufen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy