14-2 產生獨立應用程式

首先,我們來說明如何以MATLAB編譯器來將一個MATLAB函式編譯成獨立應用程式(Stand-alone Application),此程式可以在沒有安裝 MATLAB 的電腦執行。所使用的指令是 mcc,格式如下:

mcc –m userFunc.m

其中 userFunc.m 是一個由使用者所設計的MATLAB函式,經由MATLAB編譯器的轉換後,可以產生 userFunc.exe(微軟視窗平台)或 userFunc(Unix/Linux平台)的可執行檔,你可以在沒有安裝 MATLAB 的其他電腦執行這些檔案。

讓我們來看一個簡單的範例。首先,我們先撰寫一個 MATLAB 函式myEigValue.m,此函式的輸入是一個方陣,並使用 MATLAB 的內建函數 eig 來計算此方陣的固有值,然後將此固有值列印出來,此函式的原始碼如下:

14-matlab編譯器/myEigValue.mfunction eigValue = myEigValue(mat) %myEigValue: Generate the eigenvalues of the given matrix % Roger Jang, 20080210 if (isstr(mat)) % 若輸入是字串,轉成數值 mat=eval(mat); end [a, b] = eig(mat); eigValue=diag(b); disp(eigValue); % 顯示固有值 eigenValue

欲測試此範例,可以在MATLAB命令視窗輸入:

myEigValue(magic(5));

即可在螢幕顯示一個 5X5 的魔術方陣所對應的固有值。

Hint
在將此MATLAB函式編譯成為可執行檔的過程中,會產生一些額外檔案,所以你必須將本範例由光碟拷貝至硬碟,才能進行以下的操作。

由於我們要將 myEigValue.m 轉換成 myEigValue.exe,所以有一些細節要特別小心:

  1. 因為MATLAB函式轉成執行檔後,於DOS環境下輸入的資料是以字串方式傳入(命令列參數),所以 myEigValue.m 必須先使用 eval 將輸入字串轉為方陣。
  2. myEigValue.m 必須使用 disp 結果印在螢幕上,以方便 myEigValue.exe 來印出同樣的結果。

接著,我們在MATLAB命令視窗下,先將工作目錄改變至 myEigValue.m 所在的目錄,然後使用下列命令來將 myEigValue.m 編譯成 myEigValue.exe,如下:

mcc –m myEigValue.m

Hint
「-m」代表使用巨集(Macro)來產生獨立應用程式,這是一般預設的選項。

大約經過半分鐘的時間,就會完成編譯,並產生數個檔案,包含 一個可執行檔 myEigValue.exe。若要測試此可執行檔,可以直接在 DOS 命令視窗下輸入:

myEigValue.exe magic(5)

即可在螢幕顯示一個 5X5 的魔術方陣所對應的固有值。若要輸入一個特定的方陣,可以使用類雙引號來包住代表方陣的字串,範例如下:

myEigValue.exe "[1 2 3; 3 2 1; 1 1 1]" 我們可以將上述流程整理成一個單一的範例:

Example 1: 14-matlab編譯器/mcc01.mfprintf('MATLAB version=%s\n', version); if ~exist('myEigValue'), mkdir('myEigValue'); end fprintf('Compiling myEigValue.m...\n'); tic; mcc -m myEigValue.m -d myEigValue; fprintf('Time for compiling = %g sec\n', toc); fprintf('Running DOS command: myEigValue\\myEigValue.exe magic(5)\n'); !myEigValue\myEigValue.exe magic(5) fprintf('Running DOS command: myEigValue\\myEigValue.exe "[1 2 3; 3 2 1; 1 1 1]"\n'); !myEigValue\myEigValue.exe "[1 2 3; 3 2 1; 1 1 1]" MATLAB version=7.14.0.739 (R2012a) Compiling myEigValue.m... DEMO Compiler license. The generated application will expire 30 days from today, on Sat Sep 15 20:06:02 2012. Time for compiling = 45.2777 sec Running DOS command: myEigValue\myEigValue.exe magic(5) 65.0000 -21.2768 -13.1263 21.2768 13.1263 Running DOS command: myEigValue\myEigValue.exe "[1 2 3; 3 2 1; 1 1 1]" 5.0000 -1.0000 0.0000

在上述範例中,我們多做了幾件事,來讓整個檔案目錄結構乾淨一些:
  1. 如果輸出目錄 myEigValue 不存在,我們先建立這個目錄。
  2. 在 mcc 指令中使用「-d myEigValue」以指定輸出目錄,所有的輸出檔案(包含最後的可執行檔案)都會被存放在此目錄中。

在使用 mcc 時,還有幾點要注意:

由此方式所編譯出來的可執行檔,若要在沒有安裝 MATLAB 的機器執行,還必須多一道手續來安裝 MATLAB 相關的函式庫,安裝檔的位置如下(以 64-bit Windows 平台為例):

{matlabroot}\toolbox\compiler\deploy\win64\MCRInstaller.exe
此安裝檔只需執行一次即可,相關詳細說明,可參見編譯過程中所產生的 readme.txt,或是直接在MATLAB輸入「mcrinstaller」(mcr代表MATLAB Compiler Runtime,用來存放會被用到的MATLAB程式庫),就可以得到相關資訊。
MATLAB程式設計:進階篇