Domanda

Sembra che sono diversi modi per chiamare MATLAB in C ++ e C per chiamare C C ++ in MATLAB. Mentre cerco di elencarli qui, si prega di indicarlo Se mi manca qualcosa.

Per chiamare C C ++ in MATLAB, ci sono anche due metodi. Il primo è quello di chiamare le funzioni nelle librerie C condivise. Il secondo è quello di costruire il codice C ++ in C binari MEX-file, che saranno chiamati dalla riga di comando di MATLAB. Per il primo metodo, sono le librerie C condivise sono solo quelli generali, vale a dire senza modifiche al loro codice C per MATLAB e compilati dal compilatore generale C come gcc?

Per chiamare codice MATLAB in C C ++, ci sono due metodi disponibili. Il primo è motore Matlab. La seconda è quella di utilizzare MATLAB Compiler mcc per creare librerie C o C ++ condiviso dal codice MATLAB.

Oltre a MATLAB e C C ++ in grado di comunicare attraverso i dati di scrittura e la lettura da e per un po 'di file (ad esempio file di mat, file di testo).

La presenza di più modi per realizzare ciascuno degli obiettivi qui, potreste dirmi quali casi sono i migliori per l'utilizzo che di loro? vale a dire le funzioni in librerie C condivise chiamando VS edificio C codice C ++ in binario MEX-files, motore di Matlab VS compilazione del codice Matlab in C C ++ libreria condivisa.

Grazie e saluti!

È stato utile?

Soluzione

Ho solo expreience con chiamando C o funzioni C ++ da MATLAB. Sembra a me come l'unica differenza tra le funzioni chiamata in una libreria condivisa e chiamata delle funzioni da un file MEX è che con una libreria condivisa, è necessario chiamare la funzione con 'calllib', che è una funzione di comando tipo di linea e funzioni MEX permettono di chiamare le funzioni come se fossero funzioni incorporate in modo da l'interfaccia è un po 'più pulito.

Il mio suggerimento è quello di utilizzare i file MEX se

  • Si utilizza C ++ (potrebbe essere necessario scrivere un wrapper per usare un C ++ in una libreria condivisa)
  • Si utilizza MATLAB come la colla per un gran numero di C ottimizzato o routine C ++. Avrai voglia di essere in grado di chiamarli in modo pulito.

Utilizzare libreria condivisa se

  • È già una libreria C esistente che può essere utilizzato senza modifiche.
  • Hai solo bisogno di un piccolo numero di chiamate alle funzioni C.

In realtà, si tratta di all'interfaccia. Io personalmente preferisco il percorso del file MEX perché fornisce l'interfaccia più pulita da MATLAB al vostro C o la funzione C ++. Si può chiamare come solo un'altra funzione con i tipi di MATLAB standard. Con una libreria condivisa, potrebbe essere necessario fare un po 'di formattazione dei dati prima di chiamare la funzione di libreria

Altri suggerimenti

Credo che i metodi che avete nominato sono corretti (è stato un po 'che li ho usato)

Il MATLAB C-compilatore non è davvero speciale; è possibile utilizzare diversi compilatori. Vedere collegare elenco di compilatori supportati. Questo non include gcc, ma MS Visual Studio è incluso. Si incorrerà in problemi durante il collegamento con le librerie fornite.

In sostanza: chiamando MATLAB da C è qualcosa che faresti se avete bisogno di un'interfaccia a tenuta; per esempio se si desidera sincronizzare 2 utensili, o il vostro S-function (Simulink) richiede ulteriori informazioni. Ma poi, tale file viene propably chiamato da Matlab / Simulink, in primo luogo.

Chiamata c da MATLAB è ciò che si vuole fare se si scrive il proprio S-funzioni o estensioni a MATLAB.

La scelta tra C e C ++ è tuo; se si parte da un foglio bianco vi suggerisco di utilizzare C ++; non è necessario utilizzare la funzionalità completa ma permette più libertà. Anche più librerie tendono ad essere disponibili per C ++ al giorno d'oggi.

C è il linguaggio della scelta se avete bisogno di migrare verso ambienti molto diversi; cioè per compilare C per DSP per esempio. Oppure, se avete codice legacy in C da cui partire. Miscelazione C e C ++ è possibile, ma può essere un po 'ingombrante; Sono sicuro che troverete argomenti su StackOverflow su questo argomento da solo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top