2012-03-29 8 views
6

Ich habe ein Stück Code in C++ 11 geschrieben, die ich als Teil einer MATLAB MEX-Datei für GNU/Linux kompilieren möchte.Kompilieren von C++ 11-Code als Teil einer MATLAB-Mex-Datei

Das Problem ist, dass MATLAB unter Linux nur GCC 4.3 (und früher) unterstützt und GCC 4.7, das zum Kompilieren meines C++ 11-Codes benötigt wird, nicht unterstützt.

Ist es möglich, das Problem zu umgehen?

Wäre es möglich, dies zu umgehen, indem Sie einige Objektdateien mit GCC 4.7 kompilieren und mit GCC 4.3 in die MEX-Datei einbinden?

Vielen Dank im Voraus!

+0

Was meinst du mit nicht unterstützt? Am Ende sind Mex-Dateien nur gemeinsam genutzte Bibliotheken mit einer einfachen C-Schnittstelle. So müssen Sie es vielleicht manuell kompilieren und müssen möglicherweise einige Überschriften bearbeiten, aber Sie sollten in der Lage sein, es zum Laufen zu bringen. – Trass3r

+0

Bitte sehen Sie diese Antwort: http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348. Das Hinzufügen von -std = C++ 11 zu den CFLAGS, die in mexopts.sh definiert sind, funktioniert gut. – efx

Antwort

5

Wenn Sie Code in Ihrer 4.3-Erweiterung schreiben und kompilieren können, dann schreiben Sie einfach Code, um ein gemeinsames Objekt zu öffnen, das Sie in 4.7 geschrieben und kompiliert haben. Verwenden Sie die 4.7 .so, um alle Ihre C++ 11 Arbeit zu tun, und geben Sie einfach Ihre Informationen über eine C-Schnittstelle zu ihm. Die 4,3 Extionsion, die Sie schreiben, kann auf alle MATLAB Interop-Sachen zugreifen.

Sie könnten dies auch auf verschiedene andere Arten tun, aber dies ist am saubersten. Sie sollten nicht versuchen, eine Objektdatei mit Ihrer 4.3-Erweiterung zu verknüpfen, da Sie auf zwei verschiedene Versionen der Standardbibliothek zugreifen (ganz anders), und Sie können nicht mehrere Definitionen der gleichen Klassen mit verschiedenen Layouts/Methoden/etc haben . Sie würden die One Definition Rule (ODR) von C++ bekämpfen.