A MATLAB programozási nyelv

Fordítók



Fordítók

A MATLAB önálló programnyelv, így rendelkezik saját fordítóval is. A fordítót az mcc paranccsal hívhatjuk meg, melynek paramétere egy M kiterjesztésű fájl. Ebből fordítás után különálló alkalmazást, vagy fordítási egységet kapunk. A MATLAB a következő elemek generálására képes:

Csomagoló fájlok

A MATLAB minden egységhez legenerálja a hozzá tartózó csomagoló(wrapper) fájlt is, amely tartalmazza a lefordított alkalmazás és a futtatandó állomány közötti interfészt. A wrapper függ a futtató környezettől. Hogy a szükséges interfészt biztosítsa, a csomagoló:

Például egy önálló futtatható alkalmazáshoz tartozó wrapper tartalmazza a main függvényt.

Fordítás

Nézzük a fordítás lépéseit egy egyszerű példaprogramon keresztül:

A -m paraméterrel megadjuk a fordítónak, hogy egy futtatható C alkalmazást generáljon. Hatására létrejönnek a szükséges .c kiterjesztésű fájlok. A -v (verbose) opcióval pedig arra utasíthatjuk a compiler-t, hogy a fordítás minden lépését jelenítse meg. Ez azért lehet hasznos, mert információt kapunk arról, hogy mien fordítót, fordítási direktívákat használunk és mely környezeti változókra történik hivatkozás.
Nincs más dolgunk, mint parancssorból futtatni a létrejött hello.exe-t. Ha mindent helyesen csináltunk, akkor a kimenet:
ans =
Hello World!

A létrehozott fájl minden olyan számítógépen futtatható amelyen olyan operációs rendszer van, mint amilyen a fordító gépen volt. Ha tehát linuxon szeretnénk futtatni akkor, linux alatti MATLAB-ban kell fordítanunk. A futtatáshoz szükséges még a MATLAB Component Runtime is. Az MRCInstaller.exe megtalálható a MATLABroot\toolbox\compiler\deploy\win32 Ugyanakkor a MATLAB-ban is legeneráltathatjuk a szükséges könyvtárakat egy tömöríttt fájlba. Ehhez a buildmcr(útvonal, fájlnév); parancsot kell használnunk. Ezután a fordító által generált fájlokat(.m, .c, .ctf, .exe), másoljuk egy közös könyvtárba, és adjuk hozzá a dinamikus könyvtárakhoz a \runtime\win32 útvonalat (windowsban a Path környezeti változóhoz kell hozzáadni), vagy másoljuk be ide az alkalmazást. Ezután már futtathatjuk a programot az adott gépen.
Ha a projectünk több M-fájlból áll, akkor ezeket csak fel kell sorolnunk az mcc parancs után. Például, ha van egy main.m és egy mrank.m fájlunk, akkor azokat így fordítjuk: mcc -mc main mrank

.

A MATLAB-ban írt függvényeket C/C++ projectekben is meghívhatjuk. Ehhez az elkészült M fájlokhoz lib wrappert kell készíteni. Például az előző hello.m programunkhoz mcc -W lib:helloLib hello parancsot kell kiadnunk. Ennek hatására a már említett fájlok mellet létrejön egy hellolib.h is. Ezt kell includolni ha MATLAB-os függvényünket használni akarjuk. Például írjunk egy hello.c C programot:

#include 
#include 
#include "hellolib.h"

main( int argc, char **argv )
{
    mclInitializeApplication(NULL,0);
    helloLibInitialize();/* Initialize the library of M-Functions */
    mlfHello();
    helloLibTerminate(); /* Terminate the library of M-functions */
    mclTerminateApplication();
}
Először inicializálni kell az MCR és az általunk készített hellolib könyvtárakat. Ezek után használhatjuk a MATLAB függvényeket. Végül az utolsó sorban pedig meg kell hívni az MCR termináló függvényét. Ezután a mcc -W lib:helloLib -T link:exe hello hello.c paranccsal fordíthatjuk egybe a fájlokat. Majd futtathatjuk az hello.exe fájlt:
ans =
Hello World!