2012-03-29 14 views
6

Mam kod napisany w C++ 11, który chcę skompilować jako część pliku MATLAB MEX dla GNU/Linux.Kompilowanie kodu C++ 11 jako części pliku mex MATLAB

Problem polega na tym, że MATLAB w systemie Linux obsługuje tylko GCC 4.3 (i wcześniejsze) i nie obsługuje GCC 4.7, który jest wymagany do kompilowania mojego kodu C++ 11.

Czy można obejść problem?

Czy można obejść ten problem, kompilując niektóre pliki obiektów za pomocą GCC 4.7 i łącząc je z plikiem MEX przy użyciu GCC 4.3?

Z góry dziękuję!

+0

Co masz na myśli, gdy nie jest obsługiwane? Na koniec pliki mex są tylko bibliotekami współdzielonymi z prostym interfejsem C. Być może będziesz musiał skompilować go ręcznie i będziesz musiał edytować niektóre nagłówki, ale powinieneś być w stanie go uruchomić. – Trass3r

+0

Proszę zobaczyć tę odpowiedź: http://stackoverflow.com/questions/25648949/error-when-compiling-c11-code-in-a-matlab-mex-file#25649348. Zasadniczo dodanie -std = C++ 11 do CFLAGS zdefiniowanego w mexopts.sh działa dobrze. – efx

Odpowiedz

5

Jeśli możesz napisać dowolny kod w rozszerzeniu 4.3 i skompilować go, po prostu napisz kod do dlopen obiektu współdzielonego, który napisałeś i skompilowałeś w 4.7. Użyj 4.7 .so, aby wykonać całą pracę C++ 11, i po prostu przekazuj do niej swoje dane za pośrednictwem interfejsu C. Wypisane przez ciebie wersje 4.3 mogą uzyskać dostęp do wszystkich współzależności MATLAB.

Można to zrobić na wiele różnych sposobów, ale jest to najczystsze. Nie powinieneś próbować łączyć pliku obiektu z rozszerzeniem 4.3, ponieważ będziesz miał dostęp do dwóch różnych wersji standardowej biblioteki (całkiem inne) i nie możesz mieć wielu defniycji tych samych klas z różnymi układami/metodami/etc . Będziesz walczył z zasadą One Definition (ODR) C++.

Powiązane problemy