2009-10-21 1 views
13

Ho un codice che ho bisogno di codificare in C++ a causa della forte dipendenza dai template. Voglio chiamare questo codice da MATLAB: in pratica, ho bisogno di passare alcuni parametri al codice C++ e il codice C++ restituisce una matrice a MATLAB. Ho sentito che questo è possibile con qualcosa chiamato un file MEX che sto ancora esaminando. Tuttavia non sono sicuro di ciò che è supportato in questi file MEX. È supportato tutto il C++ (ad esempio STL e Boost)? Quanto è difficile?Chiama codice C++ da MATLAB?

MODIFICA: non ho bisogno di alcuna libreria condivisa, solo elementi di intestazione come shared_ptr.

+0

[Video di formazione (persiano)] (https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad

risposta

8

Dai un'occhiata allo MEX-files Guide, in particolare alla Sezione 25-27 per C++. Le strutture di dati di base STL/Boost dovrebbero funzionare, ma il threading con Boost potrebbe essere un problema.
cout non funziona come previsto in C++, deve invece essere utilizzato mexPrintf.

+0

fornirò una certa cautela per esperienza. Se si utilizza Simulink e RTW, quando si compila il flag -DRT viene impostato. Alcune delle librerie matematiche di boost utilizzano il modello . Il -DRT uccide queste classi. Se si riscontra questo problema, provare a cambiare -DRT a -DRT = RT nel file make. – KitsuneYMG

3

È certamente possibile scrivere file MEX in C++ che utilizzano STL e boost. In generale, dovresti essere in grado di fare tutto ciò che vuoi all'interno di un file MEX C++. La principale restrizione pratica è che MATLAB ha già un sacco di librerie, quindi se stai usando uno dei pezzi boost che ha bisogno di una libreria condivisa (alcuni sono solo di intestazione), dovrai abbinare la versione che compilerai contro con quella spedizione con MATLAB.

Per esempio, le navi MATLAB R2009b con boost 1.36 (si può dire guardando i nomi delle librerie in <matlabroot>/bin/arch < >).

1

I file C++ vengono effettivamente compilati da un compilatore esterno. Utilizzare mex -setup per selezionare quale (here è un elenco di compilatori supportati). Pertanto, non dovresti avere troppe cose strane, né dovresti essere troppo limitato da ciò che puoi fare.

L'anno scorso ho eseguito alcune operazioni MEX e la mia memoria è un po 'arrugginita, ma è necessario costruire gli array MATLAB utilizzando le funzioni MEX. Ho trovato adeguata la documentazione MATLAB e l'intera esperienza non è stata troppo dolorosa.

1

STL è sicuramente supportato. Boost probabilmente ancora. Il punto è che fino a quando hai installato STL e BOOST sul tuo computer, dovresti essere pronto.