使用MATLAB編譯器,我們也可以產生共享程式庫(Shared Libraries),包含所有由使用者定義的函式,以便讓其他獨立應用程式來呼叫。
例如,假設我們要產生一個共享程式庫,其功能包含矩陣相乘和反矩陣的計算,此時我們可先定義這兩個 MATLAB 函式,myMatInv.m(計算反矩陣)及 myMatMultiply.m(計算矩陣相乘):
接著我們要將這兩個 MATLAB 函式編譯成共享程式庫,程式庫名稱為 matLib,所使用的指令如下:
mcc -B csharedlib:myMatLib myMatInv.m myMatMultiply.m -d sharedLibrary
此時會在輸出目錄 sharedLibrary 產生數個檔案,主檔名都是 myMatLib,這些檔案即是 myMatLib 程式庫,我們可以使用一般獨立應用程式來呼叫這個程式庫內所定義的函式。由於這個程式庫是由兩個 MATLAB 函式編譯所得,因此我們可以得到兩個對應的 C 函式,分別是 mlfMyMatInv 及 mlfMyMatMultiply,對應關係如下:
- out=myMatInv(in)->mlfMyMatInv(1, &out, in);
- out=myMatMultiply(in1, in2)->mlfMyMatMultiply(1, &out, in1, in2);
使用共享程式庫 myMatLib.dll 來呼叫這兩個 C 函式的獨立應用程式範例如下:
若要編譯此獨立程式,可在 MATLAB 命令視窗輸入如下:
mbuild -IsharedLibrary myMatLibMain.c sharedLibrary/myMatLib.lib
其中 -IsharedLibrary 負責告知 mbuild 到 sharedLibrary 去搜尋標頭檔 myMatLib.h,而 sharedLibrary/myMatLib.lib 則是負責載明 sharedLibrary/myMatLib.dll 的使用方式。執行完上述指令後,即可產生獨立應用程式 myMatLibMain.exe,但在使用此可執行檔之前,我們必須讓作業系統知道 myMatLib.dll 的位置,否則 myMatLabMain.exe 無法使用此共享程式庫,有兩種方式可以達到此目的:
- 將 sharedLibrary/myMatLib.dll 拷貝到與 myMatLibMain.exe 同一層目錄(假設是目前目錄),對應的 DOS 指令是:
copy /y sharedLibrary/myMatLib.dll .
- 將 sharedLibrary 加到 DOS 的搜尋路徑之中。
set path=%path%;sharedLibrary
完成上述設定後,只要在 DOS 命令視窗下輸入「myMatLibMain」,即可看到此程式碼執行的結果。
若我們將上述步驟整合在一個指令檔,可以得到下列範例:
有關 mcc 及 mbuild 指令的選項很多,讀者可由「doc mcc」及「doc mbuild」得到完整的線上支援,在此不再贅述。
MATLAB程式設計:進階篇