2012-03-29 7 views
6

Ho un pezzo di codice scritto in C++ 11, che voglio compilare come parte di un file MATLAB MEX per GNU/Linux.Compilazione del codice C++ 11 come parte di un file mex MATLAB

Il problema è che MATLAB su Linux supporta solo GCC 4.3 (e versioni precedenti) e non supporta GCC 4.7, necessario per compilare il codice C++ 11.

È possibile aggirare il problema?

Sarebbe possibile aggirare questo problema compilando alcuni file oggetto utilizzando GCC 4.7 e collegandoli nel file MEX utilizzando GCC 4.3?

Grazie in anticipo!

+0

Cosa intendi per non supportato? Alla fine i file mex sono solo librerie condivise con una semplice interfaccia C. Quindi potrebbe essere necessario compilarlo manualmente e potrebbe dover modificare alcune intestazioni, ma dovresti riuscire a farlo funzionare. – Trass3r

+0

Si prega di vedere questa risposta: http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348. Fondamentalmente l'aggiunta di -std = C++ 11 ai CFLAGS definiti in mexopts.sh funziona correttamente. – efx

risposta

5

Se è possibile scrivere qualsiasi codice nell'estensione 4.3 e compilarlo, quindi basta scrivere il codice per eseguire l'dlopen di un oggetto condiviso che è stato scritto e compilato in 4.7. Usa 4.7 .so per fare tutto il tuo C++ 11, e passa semplicemente le tue informazioni attraverso un'interfaccia C. Le 4.3 esecuzioni che scrivi possono accedere a tutto il materiale di interoperabilità di MATLAB.

Puoi farlo anche in altri modi, ma questo è il più pulito. Non dovresti provare a collegare un file oggetto all'estensione 4.3, dato che accederai a due versioni differenti della libreria standard (abbastanza diverse) e non puoi avere più definizioni delle stesse classi con layout/metodi/ecc differenti . Dovresti combattere la One Definition Rule (ODR) di C++.

Problemi correlati