2009-10-21 16 views
13

Mam trochę kodu, który muszę kodować w C++ z powodu dużego polegania na szablonach. Chcę wywołać ten kod z MATLAB: w zasadzie muszę przekazać niektóre parametry do kodu C++ i mieć kod C++ zwracający macierz do MATLAB. Słyszałem, że jest to możliwe z czymś, co nazywa się plikiem MEX, którego wciąż szukam. Jednak nie jestem pewien, co jest obsługiwane w tych plikach MEX. Czy obsługiwane jest całe C++ (na przykład STL i Boost)? Jak trudne to jest?Wywołanie kodu C++ z MATLAB?

EDYCJA: Nie potrzebuję żadnych udostępnionych bibliotek, tylko pliki nagłówkowe, takie jak shared_ptr.

+0

[filmy szkoleniowe (perski)] (https://drive.google.com/drive/folders/0B56iSBYoI8YbN2ExMzA5NTMtN2Q1NS00MGMyLTk3ODctYjNiMzM1ZjgwMzg2) – Ghominejad

Odpowiedz

8

Spójrz na MEX-files Guide, szczególnie Sekcja 25-27 dla C++. Podstawowe struktury danych powinny działać, ale wątki z Boostem mogą być problemem.
cout nie będzie działać zgodnie z oczekiwaniami w C++, mexPrintf musi być użyty zamiast tego.

+0

będę zapewnić pewną ostrożność z doświadczenia. Jeśli używasz Simulink i RTW, podczas kompilowania flagi -DRT jest ustawiony. Niektóre z bibliotek matematycznych boost używają szablonu . The -DRT zabija te klasy. Jeśli napotkasz ten problem, spróbuj zmienić -DRT na -DRT = RT w pliku make. – KitsuneYMG

3

Z pewnością możliwe jest pisanie plików CEX MEX, które używają STL i boost. Ogólnie rzecz biorąc, powinieneś być w stanie zrobić wszystko, co chcesz w pliku CEX MEX. Głównym praktycznym ograniczeniem jest to, że MATLAB jest już dostarczany z garstką bibliotek, więc jeśli używasz jednego z elementów doładowania, który potrzebuje wspólnej biblioteki (niektóre są tylko nagłówkami), musisz dopasować wersję, którą kompilujesz z tą wysyłką z MATLAB.

Na przykład, MATLAB R2009b statki z doładowania 1,36 (można powiedzieć, patrząc na nazw bibliotek w <matlabroot>/bin/<arch>).

1

Pliki C++ są faktycznie kompilowane przez zewnętrzny kompilator. Użyj mex -setup, aby wybrać, który z nich (here jest listą obsługiwanych kompilatorów). Dlatego nie powinieneś mieć zbyt wielu dziwnych rzeczy, ani nie możesz być zbyt ograniczony przez to, co możesz zrobić.

Zrobiłem trochę rzeczy MEX w zeszłym roku, a moja pamięć jest nieco zardzewiała, ale trzeba zbudować macierze MATLAB przy użyciu funkcji MEX. Uważam, że dokumentacja MATLAB jest odpowiednia, a całe doświadczenie nie jest zbyt bolesne.

1

STL jest zdecydowanie obsługiwany. Zwiększ prawdopodobnie jeszcze. Chodzi o to, jak długo twój STL i BOOST są rozmieszczone na twoim komputerze, powinieneś być dobry.