Atau dengan kata lain: Membuat Library MEX
Salah satu kemelahan MEX adalah setiap fungsi C yang akan dicompile, harus di-wrap dalam sebuah fungsi beranama mexFunction, dan nama file yang berisi mexFunction harus sama dengan nama fungsi yang diinginkan. Misalnya, kita ingin membuat fungsi"adder: di MEX berikut:
FIle tersebut jika dicompile menggunakan MEX, akan menghasilkan file .mex (atau .mexgw, .mexw64, dsb), dimana namafungsi sama dengan nama file-nya. Agar fungsi hasil compileasi bisa dipanggil di Matlab dengan cara berikut:
Demikian juga kalau kita punya beberapa fungsi C lainnya yang ingin dicompile ke MEX, maka tiap fungsi harus disimpan dalam nama file yang sesuai dengan nama fungsi yang dimaksud. Ini menjadi drawback ketika kita punya banyak sekali fungsi, sehingga terpaksa dicompile dalam banyak file MEX (misal: adder.mex, mult.mex, div.mex, dsb.). Bisakah kita mengcompile semua fungsi MEX tersebut dalam satu file MEX saja, sebutlahlibrary.mex? Bisa.
Berikut workaround-nya:
1. Buat satu fungsi MEX (library.c) yang berfungsi untuk memparsing nama fungsi.
Masukkan nama-nama fungsi sebagai header, misalnya:
2. Sesuaikan nama fungsi pada masing-masing file sesuai nama yang ada di header (poin 1).
Misalnya untuk adder.c jadi begini:
3. Compile library.c bersamaan dengan fungsi-fungsi lainnya.
Salah satu kemelahan MEX adalah setiap fungsi C yang akan dicompile, harus di-wrap dalam sebuah fungsi beranama mexFunction, dan nama file yang berisi mexFunction harus sama dengan nama fungsi yang diinginkan. Misalnya, kita ingin membuat fungsi"adder: di MEX berikut:
123456789101112131415161718192021222324252627 |
|
>> adder(2,3)
adder
Adder from MEX function
ans =
5
Maka file tersebut harus disimpan dengan nama file adder.c, sehinggal ketika dicompile menghasilkan file adder.mex (lihat keterangan diatas).Demikian juga kalau kita punya beberapa fungsi C lainnya yang ingin dicompile ke MEX, maka tiap fungsi harus disimpan dalam nama file yang sesuai dengan nama fungsi yang dimaksud. Ini menjadi drawback ketika kita punya banyak sekali fungsi, sehingga terpaksa dicompile dalam banyak file MEX (misal: adder.mex, mult.mex, div.mex, dsb.). Bisakah kita mengcompile semua fungsi MEX tersebut dalam satu file MEX saja, sebutlahlibrary.mex? Bisa.
Berikut workaround-nya:
1. Buat satu fungsi MEX (library.c) yang berfungsi untuk memparsing nama fungsi.
Masukkan nama-nama fungsi sebagai header, misalnya:
void mexAdder( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );
void mexMult( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] );
Lihat code library.c berikut:12345678910111213141516171819202122232425262728 |
|
Misalnya untuk adder.c jadi begini:
1234567891011121314 |
|
>> mex library.c adder.c mult.c
4. Selesai! Untuk memanggil fungsi, caranya:>> library('adder', 2, 3)
adder
Adder from MEX function
ans =
5
Sekarang kita punya satu file MEX (library.mex) yang berisi semua fungsi C/MEX. Mudah kan!? (ya2n) :D