第21章 MATLAB程序編譯_第1頁
第21章 MATLAB程序編譯_第2頁
第21章 MATLAB程序編譯_第3頁
第21章 MATLAB程序編譯_第4頁
第21章 MATLAB程序編譯_第5頁
已閱讀5頁,還剩113頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2024/3/3合肥工業(yè)大學(xué)機(jī)械與汽車工程學(xué)院MATLAB程序編譯山東省科學(xué)院計(jì)算中心劉煥進(jìn)E-mail:liuhuanjinliu@2024/3/3MATLAB編譯器的工作機(jī)理

MATLAB編譯器的安裝與配置編譯部署

典型案例介紹本章的主要內(nèi)容包括:2024/3/3第一節(jié)MATLAB編譯器的工作機(jī)理2024/3/3MATLAB編譯器產(chǎn)品簡(jiǎn)介;

MATLAB編譯器的功能;幾個(gè)要點(diǎn):關(guān)于MATLAB編譯器產(chǎn)生的應(yīng)用程序或運(yùn)行庫;關(guān)于打包器(wrapper)文件;組件技術(shù)文件(CTF);本節(jié)的主要內(nèi)容包括:2024/3/3MATLAB編譯器產(chǎn)品是MATLAB應(yīng)用程序集成與發(fā)布的一種重要工具,它是一個(gè)運(yùn)行于MATLAB環(huán)境的獨(dú)立工具。MATLAB編譯器可以將M文件、MEX文件、MATLAB對(duì)象或其它MATLAB代碼轉(zhuǎn)換為C/C++代碼,然后再調(diào)用外部C/C++編譯器把產(chǎn)生的源代碼編譯、鏈接成獨(dú)立的應(yīng)用程序、庫、COM對(duì)象以及Excel插件。

MATLAB編譯器產(chǎn)品簡(jiǎn)介2024/3/3(1)將M文件編譯成為可以在UNIX、Windows和Macintosh操作系統(tǒng)上獨(dú)立運(yùn)行的應(yīng)用程序。獨(dú)立運(yùn)行的應(yīng)用程序就是在其運(yùn)行過程中可以不需要MATLAB軟件的同時(shí)運(yùn)行,此外,也可以在沒有安裝MATLAB軟件的計(jì)算機(jī)上運(yùn)行這些應(yīng)用程序。(2)將M文件編譯成為C和C++共享函數(shù)庫(在Windows系統(tǒng)上應(yīng)用的動(dòng)態(tài)鏈接庫DLLs,Linux和UNIX系統(tǒng)下為共享的庫文件)。MATLAB編譯器的功能2024/3/3(3)MATLABBuilderEX可以將MATLAB函數(shù)打包,以便MicrosoftExcel用戶可以通過VBA在Excel程序中訪問這些函數(shù)。(4)MATLABBuilderJA可以將MATLAB中的M代碼函數(shù)封裝到Java類中。Java類是Java代碼的一部分,包含了Java方法以及執(zhí)行動(dòng)作的單元。(5)MATLABBuilderNE可以將MATLAB函數(shù)打包,以便.NET用戶可以從任何CLS相兼容的語言中訪問這些函數(shù)。2024/3/3一、關(guān)于MATLAB編譯器產(chǎn)生的應(yīng)用程序或運(yùn)行庫

當(dāng)用戶打包和部署由MATLAB編譯器產(chǎn)生的應(yīng)用程序和運(yùn)行庫時(shí),必須包含MATLAB編譯器運(yùn)行庫(MATLABCompilerRuntime,簡(jiǎn)稱MCR

)以及由編譯器產(chǎn)生的一系列支持文件。同時(shí),必須在目標(biāo)計(jì)算機(jī)上指定這些文件的系統(tǒng)路徑,以便系統(tǒng)能夠找到這些文件。MATLAB編譯器產(chǎn)生的應(yīng)用程序或運(yùn)行庫包括兩部分:一個(gè)平臺(tái)相關(guān)的二進(jìn)制文件以及一個(gè)包含MATLAB函數(shù)和數(shù)據(jù)的文檔(CTF)。應(yīng)用程序的二進(jìn)制文件由一個(gè)主函數(shù)組成,而運(yùn)行庫的二進(jìn)制文件由多個(gè)用戶輸出的函數(shù)組成。幾個(gè)要點(diǎn):

2024/3/3二、關(guān)于打包器(wrapper)文件

要產(chǎn)生用戶指定的、平臺(tái)相關(guān)的二進(jìn)制文件,編譯器產(chǎn)生一個(gè)或多個(gè)打包器文件。打包器文件提供了指向被編譯的M代碼的接口(函數(shù)),通過這些接口,打包器文件可以創(chuàng)建MATLAB編譯器生成的代碼與所支持的可執(zhí)行程序(如獨(dú)立應(yīng)用程序或庫)之間的鏈接。打包器文件依據(jù)執(zhí)行環(huán)境的不同而不同。

打包器文件主要實(shí)現(xiàn)如下功能:(1)通過特定的接口(函數(shù))執(zhí)行初始化和終止工作。(2)定義包含路徑信息、密鑰以及MCR所需的其它信息的數(shù)據(jù)數(shù)組。(3)提供必需的代碼,用來將調(diào)用信息從接口函數(shù)傳遞給包含在MCR中的MATLAB函數(shù)。(4)對(duì)于應(yīng)用程序,包含主函數(shù)(main函數(shù))。(5)對(duì)于運(yùn)行庫,包含每個(gè)公開的M函數(shù)的入口點(diǎn)。當(dāng)使用編譯器產(chǎn)生的運(yùn)行庫時(shí),在客戶端代碼中調(diào)用庫初始化和終止例程。2024/3/3三、組件技術(shù)文件(CTF)

組件技術(shù)文件(ComponentTechnologyFile,簡(jiǎn)稱CTF)。MATLAB編譯器在編譯的同時(shí)也產(chǎn)生組件技術(shù)文件(CTF),該文件獨(dú)立于應(yīng)用程序或運(yùn)行庫,并于每個(gè)操作系統(tǒng)平臺(tái)相關(guān)的。該文件以.ctf作為后綴,包含定義應(yīng)用程序或運(yùn)行庫的MATLAB函數(shù)和數(shù)據(jù),并且在默認(rèn)的情況下,內(nèi)嵌于共享的C/C++庫和獨(dú)立的應(yīng)用程序的二進(jìn)制文件中。2024/3/3第二節(jié)MATLAB編譯器的安裝及配置2024/3/3

安裝要求;

編譯器的安裝;編譯器的配置;本節(jié)的主要內(nèi)容包括:2024/3/3一、安裝要求在安裝MATLAB編譯器之前,用戶必須確保在系統(tǒng)中安裝了合適版本的MATLAB軟件。MathWorks公司的網(wǎng)站上提供了相關(guān)的信息,用戶可在以下網(wǎng)頁中查找編譯器的相關(guān)信息:

/products/compiler/requirements.htmlMATLAB編譯器的正常運(yùn)行對(duì)操作系統(tǒng)或內(nèi)存都沒有特別的要求,只要操作系統(tǒng)和內(nèi)存都支持MATLAB軟件的正常運(yùn)行即可。1、系統(tǒng)要求2024/3/3MATLAB編譯器還需要在系統(tǒng)中安裝其所支持的ANSIC/C++編譯器,例如:BorlandC/C++、MicrosoftVisualC++、WatcomC/C++、LccC編譯器等。通常,MATLAB編譯器都支持第三方編譯器的當(dāng)前版本以及舊的版本。對(duì)于MATLAB以及MATLAB編譯器所支持的最新的編譯器列表,請(qǐng)參照MathWorks公司技術(shù)支持部門的技術(shù)備忘錄,其網(wǎng)址為:/support/tech-notes/1600/1601.shtml2、支持的第三方編譯器2024/3/3(1)支持的ANSIC/C++Windows平臺(tái)編譯器使用如下的32位的C/C++編譯器可以產(chǎn)生32位Windows動(dòng)態(tài)鏈接庫(DLLs)或Windows應(yīng)用程序(以MATLABV4.14(R2010b)編譯器為例):(1)LccC2.4.1(包含于MATLAB中),這僅是個(gè)C編譯器,不針對(duì)C++。(2)MicrosoftVisualC++(MSVC)6.0、8.0、9.0、10.0。(3)IntelC++11.1。(4)OpenWatcom1.8。(5)IntelVisualFortran10.1、11.1。(6)Microsoft.NETFrameworkSDK2.0、3.0、3.5。(7)SunJavaDevelopmentKit(JDK)1.6。(1)支持的ANSIC/C++UNIX平臺(tái)編譯器在Solaris平臺(tái)上,MATLAB編譯器支持本地系統(tǒng)編譯器;在Linux、Linuxx86-64和MacOSX平臺(tái)上,MATLAB編譯器支持gcc和g++。2024/3/3二、編譯器的安裝MATLAB編譯器包含于MATLAB軟件產(chǎn)品中。因此,如果用戶初次安裝MATLAB軟件產(chǎn)品,可以在安裝的過程中選中要安裝的MATLAB編譯器產(chǎn)品,然后執(zhí)行標(biāo)準(zhǔn)安裝。如果在初次安裝的過程中沒有選中MATLAB編譯器產(chǎn)品,可以重新運(yùn)行安裝程序,選中要安裝的MATLAB編譯器產(chǎn)品,然后安裝即可。1、安裝MATLAB編譯器產(chǎn)品

2024/3/3安裝MATLAB軟件的過程中選擇安裝編譯器產(chǎn)品2024/3/3要安裝ANSIC/C++編譯器,需要執(zhí)行包含有C/C++編譯器的安裝向?qū)В0惭b并正確配置即可。用戶在安裝C/C++編譯器時(shí)可能會(huì)遇到有關(guān)配置的問題,下表提供了有關(guān)配置信息的常見問題。2、安裝ANSIC/C++編譯器

2024/3/3問題描述安裝選項(xiàng)建議完全安裝編譯器。如果只安裝一部分,可能會(huì)忽略MATLAB編譯器所必需的組件安裝調(diào)試器文件對(duì)于MATLAB編譯器產(chǎn)品來說,沒有必要安裝調(diào)試器(DBG)文件微軟基礎(chǔ)類庫(MFC)不需要16位動(dòng)態(tài)鏈接庫(DLLs)不需要ActiveX不需要從命令行中運(yùn)行選擇編譯器從命令行運(yùn)行的所有相關(guān)選項(xiàng)更新注冊(cè)表根據(jù)安裝程序需要而定安裝MicrosoftVisualC++6.0如果需要改變編譯器的安裝位置,就必須改變Common文件夾的位置;不要改變VC98文件夾的默認(rèn)位置2024/3/31、關(guān)于mbuild的應(yīng)用

三、編譯器的配置用戶使用mbuild腳本可以方便地指定一個(gè)選項(xiàng)文件(optionsfile),該選項(xiàng)文件允許用戶進(jìn)行如下操作: ●為每個(gè)可支持的編譯器設(shè)置默認(rèn)的編譯器和連接器選項(xiàng); ●修改編譯器或編譯器設(shè)置; ●創(chuàng)建應(yīng)用程序。mbuild簡(jiǎn)化了設(shè)置C或C++編譯器的過程,用戶只需使用mbuild的setup選項(xiàng)即可一次性確定所要使用的第三方編譯器。MATLAB編譯器(mcc)產(chǎn)品在一定的條件下自動(dòng)啟動(dòng)mbuild。特別地,mcc–m或mcc-l(小寫的L)將啟動(dòng)mbuild來執(zhí)行編譯和連接。2024/3/32、

配置ANSIC或C++編譯器

說明:選項(xiàng)文件包含用來控制已安裝的編譯器的標(biāo)志或設(shè)置,選項(xiàng)文件是與編譯器相關(guān)的,MathWorks公司對(duì)不同的C/C++編譯器都提供了不同的選項(xiàng)文件。用戶可以根據(jù)需要修改選項(xiàng)文件的內(nèi)容,但在通常情況下,用戶不必關(guān)心選項(xiàng)文件的內(nèi)容,而只是簡(jiǎn)單地使用mbuild的setup選項(xiàng)來配置C或C++編譯器即可。使用下面的命令可以選擇一個(gè)默認(rèn)的編譯器:mbuild–setup2024/3/3【例】配置編譯器

>>mbuild–setup%調(diào)用mbuild腳本來啟動(dòng)配置PleasechooseyourcompilerforbuildingstandaloneMATLABapplications:

%啟動(dòng)MATLAB的自定位系統(tǒng),MATLAB會(huì)自動(dòng)搜索系統(tǒng)中安裝的編譯器Wouldyoulikembuildtolocateinstalledcompilers[y]/n?ySelectacompiler:[1]Lcc-win32C2.4.1inD:\PROGRA~1\MATLAB\R2008a\sys\lcc[2]MicrosoftVisualC++6.0inD:\ProgramFiles\MicrosoftVisualStudio[0]NoneCompiler:2%選擇編譯器

Pleaseverifyyourchoices:%確定選擇的編譯器Compiler:MicrosoftVisualC++6.0Location:D:\ProgramFiles\MicrosoftVisualStudioArethesecorrect[y]/n?y%結(jié)束配置Tryingtoupdateoptionsfile:C:\DocumentsandSettings\Administrator\ApplicationData\MathWorks\MATLAB\R2008a\compopts.batFromtemplate:D:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\msvc60compp.batDone...2024/3/3驗(yàn)證編譯器配置是否正確?

在當(dāng)前目錄中創(chuàng)建test.m文件,文件內(nèi)容很簡(jiǎn)單:彈出信息框,顯示“Hello,World!”信息。在命令窗口中調(diào)用mcc對(duì)test.m文件進(jìn)行編譯:mcc-mtest.m編譯完成后,產(chǎn)生test.exe文件,用鼠標(biāo)雙擊即可正常運(yùn)行,表明編譯器設(shè)置正確。2024/3/33、選項(xiàng)文件MATLAB軟件中包含了用于Windows平臺(tái)和UNIX平臺(tái)的預(yù)置選項(xiàng)文件,如下表所列(以MATLABR2008a為例)。(注:這些選項(xiàng)僅適用于32位MATLAB軟件)。通常情況下,用戶不必關(guān)心選項(xiàng)文件是如何工作的。當(dāng)然,用戶也可以根據(jù)自己的需要來修改選項(xiàng)文件。2024/3/3選項(xiàng)文件編譯器Windows平臺(tái)(選項(xiàng)文件位于:{matlabroot根目錄}\bin\win32\mbuildopts路徑下)lcccompp.batLccC,V2.4.1(包含于MATLAB中)msvc60compp.batmsvc71compp.batmsvc80compp.batmsvc80freecompp.batMicrosoftVisualC/C++,V6.0MicrosoftVisualC/C++,V7.1MicrosoftVisualC/C++,V8.0MicrosoftVisualC/C++,V8.0ExpressEditionUNIX平臺(tái)(選項(xiàng)文件位于:{matlabroot根目錄}/bin/目錄下mbuildopts.shSolaris平臺(tái)下,使用本地的ANSI編譯器;對(duì)于Linux和Macintosh平臺(tái),使用gccMATLAB中的預(yù)置選項(xiàng)文件列表:

2024/3/3要定位在Windows系統(tǒng)下的選項(xiàng)文件,mbuild腳本按照如下的順序進(jìn)行搜索:(1)當(dāng)前目錄;(2)Windows系統(tǒng)的用戶配置文件目錄。Windows系統(tǒng)的用戶配置目錄中包含了諸如桌面外觀、最近使用的文件、“開始”菜單中的項(xiàng)目等用戶信息。mbuild將在-setup過程中創(chuàng)建的選項(xiàng)文件compopts.bat保存到用戶配置文件目錄的一個(gè)子目錄中(例如C:\DocumentsandSettings\Administrator\ApplicationData\MathWorks\MATLAB\R2008a),如下圖所示。初次運(yùn)行mbuild命令時(shí),它會(huì)在上述兩個(gè)路徑中搜索選項(xiàng)文件,一旦找到選項(xiàng)文件則停止搜索,并使用該選項(xiàng)文件。如果沒有搜索到選項(xiàng)文件,則mbuild搜索計(jì)算機(jī)上已安裝的編譯器,并為該編譯器使用MATLAB預(yù)置的選項(xiàng)文件;如果計(jì)算機(jī)上有多個(gè)編譯器,則提示用戶選擇一個(gè)編譯器。關(guān)于Windows操作系統(tǒng)中的選項(xiàng)文件2024/3/32024/3/3要定位在UNIX系統(tǒng)下的選項(xiàng)文件,mbuild腳本按照如下的順序進(jìn)行搜索:(1)當(dāng)前目錄;(2)$HOME/.matlab/current_release;(3)matlabroot/bin。

關(guān)于Unix操作系統(tǒng)中的選項(xiàng)文件2024/3/3第三節(jié)編譯2024/3/3

有關(guān)MATLAB編譯器技術(shù)

mcc命令詳解輸入輸出文件本節(jié)的內(nèi)容包括:2024/3/3一、有關(guān)MATLAB編譯器技術(shù)MATLAB編譯器4.0使用MATLAB運(yùn)行庫(MCR),MCR是一個(gè)使M文件能夠執(zhí)行的共享庫的獨(dú)立集合。使用MCR,可以在沒有安裝MATLAB軟件的計(jì)算機(jī)上執(zhí)行MATLAB文件。MCR提供了對(duì)MATLAB中幾乎所有函數(shù)的支持。MCR使用了線程封鎖技術(shù),保證一次只能有一個(gè)線程允許訪問MCR。1、MATLAB編譯器運(yùn)行庫(MATLABCompilerRuntime)2024/3/3編譯器4.0使用了組件技術(shù)文件(CTF)來容納可部署的程序包。所有的M文件都被加密到CTF文檔中,加密時(shí)使用高級(jí)加密標(biāo)準(zhǔn)(AES)密碼系統(tǒng),其對(duì)稱密鑰使用1024位的RSA來保護(hù)。MATLAB編譯器所產(chǎn)生的每一個(gè)應(yīng)用程序或共享庫都有相關(guān)聯(lián)的CTF文檔。文檔中包含所有與組件相關(guān)聯(lián)的、基于MATLAB的內(nèi)容(M文件、MEX文件,等等)。當(dāng)CTF檔案檔案解壓到用戶的系統(tǒng)中時(shí),這些文件仍保持加密狀態(tài)。2、組件技術(shù)文件2024/3/3(1)依存關(guān)系檢查 分析、判斷用戶提供的M文件、MEX文件以及P文件所依存的函數(shù)之間的關(guān)系,并創(chuàng)建文件列表。該列表包括由輸入的M文件調(diào)用的所有M文件以及這些M文件所調(diào)用的文件,等等。此外,還包括所有內(nèi)置函數(shù)以及MATLAB對(duì)象。(2)封裝代碼生成產(chǎn)生創(chuàng)建目標(biāo)組件所需要的所有源代碼,包括: ●應(yīng)用于命令行的M函數(shù)的C/C++接口代碼(ex21_3_1_main.c)。對(duì)于數(shù)據(jù)庫和組件,該文件包括所有的接口函數(shù)。 ●組件數(shù)據(jù)文件,該文件包含運(yùn)行時(shí)執(zhí)行M代碼所需的信息。這些信息包括路徑信息以及用于加載保存在組件的CTF文檔中的M代碼的密鑰。3、組件創(chuàng)建過程2024/3/3(3)CTF文檔創(chuàng)建在依賴檢查中創(chuàng)建的MATLAB文件(M文件和MEX文件)列表用于創(chuàng)建CTF文檔。CTF文檔包含組件正常執(zhí)行所需要的文件。這些文件被加密并壓縮到單個(gè)文件中以方便部署,目錄信息也包含在其中,以確保目錄中的文件能被正確地安裝到目標(biāo)計(jì)算機(jī)。(4)C/C++編譯將在“封裝器代碼生成”中產(chǎn)生的C/C++文件編譯為目標(biāo)代碼。用戶在mcc命令行中指定的C/C++代碼也同時(shí)被編譯。(5)連接將產(chǎn)生的目標(biāo)文件和必需的MATLAB庫文件相連接,并生成最終的組件。

C/C++編譯和連接使用包含在MATLAB編譯器產(chǎn)品中的mbuild應(yīng)用程序。2024/3/3MATLAB編譯器的編譯過程2024/3/3二、mcc命令詳解1、mcc命令的語法mcc[-options]mfile1[mfile2...mfileN][C/C++file1...C/C++fileN]其中,參數(shù)options可以選擇如下的值:(1)-a

使用–afilename來指定直接添加到CTF文檔中的文件,也可以使用多個(gè)-a選項(xiàng)。MATLAB編譯器在MATLAB路徑上查找這些文件,如果文件不在MATLAB路徑上,需要指定文件的完整路徑名稱。如果-a選項(xiàng)中只包括目錄的名稱,則目錄中的所有文件將循環(huán)添加到CTF文檔中。例如:將當(dāng)前工作目錄中的testdir目錄及其子目錄中的所有文件都添加到CTF文檔中,并且目錄的子樹也保存到CTF文檔中。

2024/3/3mcc–mhello.m–a./testdir如果在文件名中包含通配符(*),則只有在目錄中符合給定格式的文件被添加的CTF文檔中,而子目錄中的文件卻不會(huì)被添加。例如:mcc-mhello.m-a./testdir/*在本例中,在./testdir目錄中的所有文件都會(huì)被添加到CTF文檔中,而在./testdir目錄下的所有子目錄中的文件則不被添加。mcc-mhello.m-a./testdir/*.m./testdir目錄下所有擴(kuò)展名為.m的文件都將被添加到CTF文檔檔案中,而在./testdir目錄下的所有子目錄中的文件則不被添加。2024/3/3其中,參數(shù)options可以選擇如下的值:(1)-a

使用–afilename來指定直接添加到CTF文檔中的文件,也可以使用多個(gè)-a選項(xiàng)。MATLAB編譯器在MATLAB路徑上查找這些文件,如果文件不在MATLAB路徑上,需要指定文件的完整路徑名稱。如果-a選項(xiàng)中只包括目錄的名稱,則目錄中的所有文件將循環(huán)添加到CTF文檔中。例如:將當(dāng)前工作目錄中的testdir目錄及其子目錄中的所有文件都添加到CTF文檔中,并且目錄的子樹也保存到CTF文檔中。

2024/3/3(2)-b產(chǎn)生與Excel兼容的公式函數(shù)產(chǎn)生一個(gè)VisualBasic文件(.bas),該文件包含一個(gè)用于編譯器產(chǎn)生的COM對(duì)象的Excel公式函數(shù)(MicrosoftExcelFormulaFunction)界面,允許MATLAB函數(shù)作為單元公式函數(shù)使用。(3)-B指定束(bundle)文件使用指定文件的內(nèi)容來替代在mcc命令行中的文件。使用語法為:-Bfilename[:<a1>,<a2>,...,<an>]束文件filename應(yīng)只包含mcc命令行選項(xiàng)、相應(yīng)的參數(shù)、和/或其它文件名。束文件可以包含其它-B選項(xiàng)。下表列出了MATLAB編譯器產(chǎn)品中的束文件列表。束文件創(chuàng)建結(jié)果內(nèi)容cpplibC++庫-Wcpplib:<shared_library_name>-Tlink:libcsharedlibC共享庫-Wlib:<shared_library_name>-Tlink:lib2024/3/3(4)-c(小寫C)只產(chǎn)生C代碼當(dāng)使用宏選項(xiàng)時(shí),只產(chǎn)生C封裝代碼,而不啟動(dòng)mbuild而產(chǎn)生獨(dú)立的應(yīng)用程序。該選項(xiàng)相當(dāng)于放在mcc命令行的末尾的-Tcodegen。(5)-C(大寫C)默認(rèn)情況下不嵌入CTF文檔缺省情況下,指示mcc不在C/C++文件、main/Winmain共享庫和獨(dú)立的二進(jìn)制文件中嵌入CTF文檔。(6)-d指定輸出目錄-ddirectory將編譯產(chǎn)生的輸出存放到由-d選項(xiàng)指定的目錄directory中。2024/3/3(7)-e禁止MS-DOS命令窗口當(dāng)產(chǎn)生獨(dú)立的應(yīng)用程序時(shí),禁止MS-DOS命令窗口的出現(xiàn),使用-e來替換-m選項(xiàng)。該選項(xiàng)僅用于Windows系統(tǒng)。使用-R選項(xiàng)來產(chǎn)生錯(cuò)誤日志文件:mcc-e-R-logfile,"log_file.txt"-vfunction_name該宏等價(jià)于:-WWinmain-Tlink:exe使用-e選項(xiàng)需要應(yīng)用程序是使用微軟的編譯器(例如MicrosoftVisualStudioExpress)編譯的,而不是使用MABLAB自帶的編譯器編譯的。(8)-f指定的選項(xiàng)文件-ffilename使用指定的選項(xiàng)文件覆蓋默認(rèn)的選項(xiàng)文件。該選項(xiàng)可使用戶在調(diào)用不同的MATLAB編譯器產(chǎn)品時(shí)使用不同的ANSI編譯器,該選項(xiàng)直接傳遞給mbuild腳本。MathWorks建議用戶不使用該選項(xiàng),而直接使用mbuild–setup命令。2024/3/3(9)-F指定的項(xiàng)目文件。指定mcc使用包含在指定的項(xiàng)目文件(.prj)中的設(shè)置。當(dāng)調(diào)用mcc時(shí),使用-Fproject_name.prj用來指定項(xiàng)目文件的名稱為project_name。該選項(xiàng)使得.prj文件及其所有附屬的設(shè)置都返回給mcc。使用mcc或deploytool創(chuàng)建的項(xiàng)目文件都可以用到該選項(xiàng)中。(10)-g產(chǎn)生調(diào)試信息包含由MATLAB編譯器產(chǎn)生的C/C++代碼的調(diào)試信息,mbuild會(huì)將合適的調(diào)試標(biāo)志傳遞給C/C++編譯器。調(diào)試選項(xiàng)使得用戶可以追溯在什么地方產(chǎn)生了錯(cuò)誤:是在MCR的初始化、函數(shù)的調(diào)用還是終止例程中產(chǎn)生了錯(cuò)誤。該選項(xiàng)不允許用戶使用C/C++調(diào)試器來調(diào)試用戶的M文件。(11)-G同-g,僅用于調(diào)試2024/3/3(12)-I添加目錄到引用路徑中 向引用目錄列表中添加新的目錄。每一個(gè)-I選項(xiàng)都會(huì)在搜索路徑的列表的開頭添加一個(gè)目錄。例如:-I<directory1>-I<directory2> 設(shè)置搜索路徑,從而directory1首先用于M文件的搜索,接下來是directory2。該選項(xiàng)對(duì)于不能訪問MATLAB路徑的獨(dú)立編譯來說是很重要的。(13)-l(小寫L)生成函數(shù)庫 該選項(xiàng)為命令行中的每一個(gè)M文件生成一個(gè)庫封裝函數(shù),并調(diào)用C編譯器來創(chuàng)建共享庫,該共享庫導(dǎo)出這些函數(shù)。庫的名字與組件的名字相同,也就是命令行上的第一個(gè)M文件的名字。該宏等價(jià)于:-Wlib:stringlink:lib(14)-m產(chǎn)生一個(gè)獨(dú)立的應(yīng)用程序該宏等價(jià)于:-Wmain-Tlink:exe。 使用-e選項(xiàng)代替-m選項(xiàng)來產(chǎn)生獨(dú)立的應(yīng)用程序,同時(shí)禁止MS-DOS命令窗口的出現(xiàn)。使用-e選項(xiàng)需要應(yīng)用程序是使用Microsoft的編譯器(例如MicrosoftVisualStudioExpress)編譯的。2024/3/3(15)-M定義編譯時(shí)間選項(xiàng)-Mstring將string直接傳遞給mbuild腳本。這提供了一種定義編譯時(shí)間選項(xiàng)的有用機(jī)制,例如:”-Dmacro=value”。如果使用多個(gè)-M選項(xiàng),只有最右邊的一個(gè)起作用。(16)-N清除路徑有效清除最小目錄集以外的路徑,下列的核心目錄及其子目錄除外:matlabroot/toolbox/matlabmatlabroot/toolbox/localmatlabroot/toolbox/compiler/deploy在mcc命令行中包含-N選項(xiàng),允許用戶替換原始路徑中的目錄,同時(shí)保留引用目錄的相對(duì)順序。出現(xiàn)在原始路徑中的引用目錄中的所有子目錄也將被替換。此外,-N選項(xiàng)保留用戶已經(jīng)引用、但不在matlabroot/toolbox路徑下的所有目錄。2024/3/3(17)-o指定輸出文件名稱指定最終可執(zhí)行文件的名稱(僅用于獨(dú)立的應(yīng)用程序)。使用-ooutputfile來命名MATLAB編譯器產(chǎn)生的最終可執(zhí)行輸出文件。在指定的名稱后將添加合適的、與平臺(tái)相關(guān)的擴(kuò)展名(如.exe用于Windows獨(dú)立應(yīng)用程序)。(18)-p向編譯路徑中添加目錄和選項(xiàng)-N聯(lián)合使用,可以添加matlabroot/toolbox路徑下指定的目錄和子目錄到MATLAB編譯路徑下。-N-pdirectory其中,directory是要添加的目錄。如果directory不是絕對(duì)路徑,則假定它在當(dāng)前工作目錄下。以下規(guī)則定義了這些目錄是如何在編譯路徑中引用的:●如果目錄在原始MATLAB路徑上,則目錄及其子目錄都被添加到編譯路徑下。●如果目錄不在原始MATLAB路徑上,在該目錄不會(huì)被添加到編譯路徑下。用戶可以使用-I選項(xiàng)來添加。

2024/3/3(19)-R運(yùn)行時(shí)間(僅適用于獨(dú)立的應(yīng)用程序)提供MCR運(yùn)行庫選項(xiàng)。使用-Roption可以提供如下表所列的運(yùn)行選項(xiàng)。選項(xiàng)描述-nojvm不使用Java虛擬機(jī)(JVM)-nojit不使用MATLABJIT(用于加速M(fèi)文件執(zhí)行的二進(jìn)制代碼生成)-nodisplay禁止MATLABnodisplay運(yùn)行時(shí)間警告(20)-S創(chuàng)建單個(gè)MCR當(dāng)編譯多個(gè)COM對(duì)象時(shí),創(chuàng)建單個(gè)MCR,每個(gè)組件的實(shí)例都使用相同的MCR。該選項(xiàng)需要MATLABBuilderNE編譯器。2024/3/3(21)-T指定產(chǎn)生目標(biāo)文件的階段和類型使用-Ttarget來定義輸出的類型。有效的target的值如下表所列。(22)-v詳述-v選項(xiàng)傳遞給mbuild并顯示關(guān)于mbuild的信息。包括:MATLAB編譯器版本號(hào)、源文件名稱、產(chǎn)生的輸出文件名稱、mbuild的啟動(dòng)。目標(biāo)描述codegen產(chǎn)生C/C++封裝文件。缺省值為codegencompile:exe同codegen,同時(shí)將C/C++文件編譯為適合連接進(jìn)獨(dú)立應(yīng)用程序里的目標(biāo)形式compile:lib同codegen,同時(shí)將C/C++文件編譯為適合連接進(jìn)共享庫/DLL里的目標(biāo)形式link:exe同compile:exe,同時(shí)將目標(biāo)文件連接進(jìn)獨(dú)立的應(yīng)用程序link:lib同compile:lib,同時(shí)將目標(biāo)文件連接進(jìn)共享庫/DLL2024/3/3(23)-w警告信息顯示警告信息。使用-woption[:<msg>]來控制警告信息的顯示。有效的語法形式如下表所示。語法描述-wlist產(chǎn)生一個(gè)將<string>映射到警告信息的表格-wenable允許全部的警告信息-wdisable[:<string>]禁止與<string>相關(guān)聯(lián)的警告信息。去掉<string>將禁止所有的警告信息-wenable[:<string>]允許與<string>相關(guān)聯(lián)的警告信息。去掉<string>將允許所有的警告信息-werror[:<string>]將與<string>相關(guān)聯(lián)的警告信息當(dāng)作錯(cuò)誤信息。去掉<string>將所有的警告信息當(dāng)作錯(cuò)誤信息2024/3/3(24)-W打包器文件使用-Wtype來控制打包器函數(shù)的創(chuàng)建。用戶提供一組函數(shù),MATLAB編譯器產(chǎn)生打包器函數(shù)以及合適的全局變量定義。下表列出了有效的選項(xiàng)。類型描述main產(chǎn)生一個(gè)POSIX外殼main()函數(shù)。(POSIX為可移植操作系統(tǒng)接口)lib:<string>當(dāng)將編譯器產(chǎn)生的代碼編譯為一個(gè)較大的應(yīng)用程序時(shí),創(chuàng)建一個(gè)C接口,并且產(chǎn)生一個(gè)初始化和終止函數(shù)。該選項(xiàng)也產(chǎn)生一個(gè)頭文件,該頭文件包含指定M文件中的所有公開函數(shù)的原型。<string>指定了生成的C/C++文件以及頭文件的基本文件名。產(chǎn)生一個(gè)包含所有非靜態(tài)的函數(shù)名稱的.exports文件cpplib:<string>當(dāng)將編譯器產(chǎn)生的代碼編譯為一個(gè)較大的應(yīng)用程序時(shí),創(chuàng)建一個(gè)C++接口,并且產(chǎn)生一個(gè)初始化和終止函數(shù)。該選項(xiàng)也產(chǎn)生一個(gè)頭文件,該頭文件包含指定M文件中的所有公開函數(shù)的原型。<string>指定了生成的C/C++文件以及頭文件的基本文件名。產(chǎn)生一個(gè)包含所有非靜態(tài)的函數(shù)名稱的.exports文件none不產(chǎn)生打包器文件。默認(rèn)值為none2024/3/3(25)-Y許可文件使用-Ylicense.dat_file來使用指定的參數(shù)覆蓋默認(rèn)的license.dat文件。(26)-z指定路徑為庫文件和引用文件指定路徑。使用-zpath來指定編譯器庫文件和引用文件所使用的路徑為path,從而代替由matlabroot返回的路徑。(27)-?幫助信息在命令提示下顯示MATLAB編譯器的幫助信息。2024/3/32、使用mcc命令(1)編譯器選項(xiàng)可以給mcc指定一個(gè)或多個(gè)MATLAB編譯器選項(xiàng)。例如:mcc-m-gmyfile.m宏是MATLAB提供的編譯器選項(xiàng),使得用戶不必手工組合多個(gè)選項(xiàng)來實(shí)現(xiàn)指定的編譯工作。例如:選項(xiàng)-l與下列宏等價(jià):-Wlib-Tlink:lib選項(xiàng)-m與下列宏等價(jià):-Wmain-Tlink:exe2024/3/3(2)組合選項(xiàng)可以把不帶參數(shù)的選項(xiàng)組合到一起使用。例如:mcc-mgmyfile.m帶參數(shù)的選項(xiàng)通常不能組合到一起,除非把帶參數(shù)的選項(xiàng)及其參數(shù)放置在命令列表的最后。例如:下面是正確的用法:%選項(xiàng)單獨(dú)列出mcc-v-Wmain-Tlink:exemyfile.m%將選項(xiàng)組合mcc-vWmain-Tlink:exemyfile.m下面是錯(cuò)誤的用法:mcc-Wvmain-Tlink:exemyfile.m

%錯(cuò)誤的用法2024/3/3(3)命令行中的沖突選項(xiàng)如果在命令行中使用的選項(xiàng)發(fā)生沖突,則編譯器優(yōu)先考慮最右側(cè)的選項(xiàng)。例如:在命令行中使用以下選項(xiàng):mcc-m-Wnonemyfile.m由于-m選項(xiàng)相當(dāng)于:-Wmain-Tlink:exe,因此兩個(gè)-W選項(xiàng)發(fā)生沖突,則編譯器只取最右邊的選項(xiàng),即-Wnone選項(xiàng)。所以,以上命令與下列命令等價(jià):mcc-Wnonemyfile.m2024/3/3三、輸入和輸出文件【例2】MATLAB編譯器以ex21_3_1.m作為輸入,產(chǎn)生獨(dú)立的應(yīng)用程序ex21_3_1.exe。1、獨(dú)立的可執(zhí)行文件functionex21_3_1x=0:pi/50:2*pi;y=sin(x);figure(1);plot(x,y,'r*');gridon2024/3/3文件描述ex21_3_1_main.c包含程序的main函數(shù)的主打包器C源文件。main函數(shù)取得由命令行傳遞的輸入?yún)?shù),并把參數(shù)作為字符串傳遞給ex20_2函數(shù)。ex21_3_1_mcc_component_data.c包含MCR用來運(yùn)行應(yīng)用程序的數(shù)據(jù)的C源文件。這些數(shù)據(jù)包括路徑信息、密鑰和其它用于MCR的初始化信息。ex21_3_1.ctfCTF文檔。該文件包含一個(gè)用于組成應(yīng)用程序的M文件的壓縮和加密的檔案。ex21_3_1.exe應(yīng)用程序的主文件。該文件讀取和執(zhí)行保存在CTF文檔中的內(nèi)容。在Windows系統(tǒng)中,該文件為ex21_3_1.exe最終產(chǎn)生的文件列表:2024/3/3【例】在本例中,MATLAB編譯器將M文件ex21_3_1.m編譯為C共享庫文件libmyshared.dll。用戶在配置好編譯器后,在命令窗口中輸入命令:mcc-Wlib:libmyshared-Tlink:libex21_3_1.m2、C共享庫文件編譯所產(chǎn)生的文件如下表所列:2024/3/3文件描述libmyshared.c數(shù)據(jù)庫打包器C源代碼文件,包含數(shù)據(jù)庫的輸出函數(shù),代表與M函數(shù)(ex21_3_1.m)的C接口,以及數(shù)據(jù)庫的初始化代碼libmyshared.h數(shù)據(jù)庫打包器頭文件,改文件將被調(diào)用limyshared.dll的輸出函數(shù)的應(yīng)用程序引用libmyshared_mcc_component_data.c包含MCR用來初始化和使用數(shù)據(jù)庫的數(shù)據(jù)(包括路徑信息、密鑰以及其它MCR初始化信息)的C源文件libmyshared.exportsmbuild用于連接數(shù)據(jù)庫的輸出文件libmyshared.ctfCTF文檔。該文件包含一個(gè)用于組成該共享庫的M文件的壓縮和加密的檔案,以及在運(yùn)行時(shí)被M文件調(diào)用的其它文件以及數(shù)據(jù)libmyshared共享數(shù)據(jù)庫二進(jìn)制文件。在Windows平臺(tái)上,改文件為libmyshared.dll,在Solaris平臺(tái)上,該文件為libmyshared.solibmyshared.exp連接器使用的輸出文件。連接器使用輸出文件來創(chuàng)建包含輸出的程序,通常是動(dòng)態(tài)鏈接庫文件(.dll)。libmyshared.lib輸入數(shù)據(jù)庫。2024/3/3【例】在本例中,MATLAB編譯器將M文件ex21_3_1.m編譯為C++共享庫文件libmyshared.dll。在命令窗口中輸入命令:mcc-Wcpplib:libmyshared-Tlink:libex21_3_1.m3、C++共享庫文件編譯所產(chǎn)生的文件如下表所列:2024/3/3文件描述libmyshared.cpp數(shù)據(jù)庫打包器C++源代碼文件,包含數(shù)據(jù)庫的輸出函數(shù),代表與M函數(shù)(ex21_3_1.m)的C++接口,以及數(shù)據(jù)庫的初始化代碼libmyshared.h數(shù)據(jù)庫打包器頭文件,改文件將被調(diào)用limyshared.dll的輸出函數(shù)的應(yīng)用程序引用libmyshared_mcc_component_data.c包含MCR用來初始化和使用數(shù)據(jù)庫的數(shù)據(jù)(包括路徑信息、密鑰以及其它MCR初始化信息)的C++源文件libmyshared.exportsmbuild用于連接數(shù)據(jù)庫的輸出文件libmyshared.ctfCTF文檔。該文件包含一個(gè)用于組成該共享庫的M文件的壓縮和加密的檔案,以及在運(yùn)行時(shí)被M文件調(diào)用的其它文件以及數(shù)據(jù)libmyshared共享數(shù)據(jù)庫二進(jìn)制文件。在Windows平臺(tái)上,改文件為libmyshared.dll,在Solaris平臺(tái)上,該文件為libmyshared.solibmyshared.exp連接器使用的輸出文件。連接器使用輸出文件來創(chuàng)建包含輸出的程序,通常是動(dòng)態(tài)鏈接庫文件(.dll)。libmyshared.lib輸入數(shù)據(jù)庫。2024/3/3第四節(jié)部署2024/3/31、確定需要打包的文件;2、使用部署工具(DeploymentTool);3、部署到目標(biāo)計(jì)算機(jī)。本節(jié)主要包括以下內(nèi)容:2024/3/3當(dāng)用戶創(chuàng)建了數(shù)據(jù)庫、組件或應(yīng)用程序后,需要將運(yùn)行時(shí)所需的文件打包,以便部署到目標(biāo)計(jì)算機(jī)中。那么,對(duì)不同的應(yīng)用程序類型,到底哪些文件需要打包呢?以下分別介紹。一、確定需要打包的文件2024/3/31、獨(dú)立的應(yīng)用程序軟件模塊描述MCRInstaller.exe(Windows)MCRInstaller是個(gè)自解壓可執(zhí)行程序,用來安裝運(yùn)行應(yīng)用程序所需的組件,該文件包含在MATLAB編譯器產(chǎn)品中MCRInstaller.bin(UNIX)MCRInstaller是個(gè)自解壓可執(zhí)行程序,用來安裝在UNIX機(jī)器上(Mac除外)運(yùn)行應(yīng)用程序所需的組件,該文件包含在MATLAB編譯器產(chǎn)品中MCRInstaller.dmg(Mac)MCRInstaller.dmg是個(gè)自解壓可執(zhí)行程序,用來安裝在Mac機(jī)器上運(yùn)行應(yīng)用程序所需的組件,該文件包含在MATLAB編譯器產(chǎn)品中application_name.ctfmbuild用于連接數(shù)據(jù)庫的輸出文件libmyshared.ctfCTF文檔。是與平臺(tái)相關(guān)的,必須與目標(biāo)計(jì)算機(jī)平臺(tái)相一致application_name.exe(Windows)MATLAB編譯器產(chǎn)生的應(yīng)用程序application_name(UNIX)2024/3/32、C/C++共享庫軟件模塊描述MCRInstaller.exe(Windows)同表21.4-1MCRInstaller.bin(UNIX)同表21.4-1MCRInstaller.dmg(Mac)同表21.4-1Unzip(UNIX)用來解壓MCRInstaller.zip,目標(biāo)計(jì)算機(jī)必須有解壓軟件libmatrix.ctfCTF文檔。是與平臺(tái)相關(guān)的,必須與目標(biāo)計(jì)算機(jī)平臺(tái)相一致libmatrix共享數(shù)據(jù)庫;擴(kuò)展名依據(jù)平臺(tái)而定,在Windows平臺(tái)中為.dlllibmatrix.h共享數(shù)據(jù)庫的頭文件2024/3/33、.NET組件軟件模塊描述componentName.ctfCTF文檔componentName.xmlxml文檔文件componentName.pdb(如果選擇了調(diào)試模式)包含調(diào)試信息的數(shù)據(jù)庫文件componentName.dll組件集成文件MCRInstaller.exeMCR安裝文件2024/3/3軟件模塊描述mwcomutil.dll用于處理數(shù)組的應(yīng)用程序,在數(shù)據(jù)轉(zhuǎn)換中提供類型定義componentName.ctfCTF文檔componentName_version.dll包含編譯的M代碼的組件MCRInstaller.exeMCR安裝文件4、COM組件2024/3/35、使用MicrosoftExcel的COM組件軟件模塊描述componentName.ctfCTF文檔componentName_projectversion.dll編譯的組件MCRInstaller.exeMCR安裝文件*.xla在<projectdir>\distrib目錄中的用戶創(chuàng)建的內(nèi)嵌Excel的文件6.Java組件用戶需創(chuàng)建包含componentName.jar文件的Java軟件包,該軟件包在componentName.ctf文件中包含指向M代碼的Java接口。2024/3/3部署工具是

MATLAB編譯器配備的圖形用戶界面(GUI)。用戶可以通過該工具提供的圖形用戶界面來使用

MATLAB命令行接口,以編譯并打包要部署在不同計(jì)算機(jī)上的組件。用戶可通過部署工具執(zhí)行以下操作:(1)指定主MATLAB函數(shù)。(2)添加無法通過依賴檢查自動(dòng)識(shí)別的文件,如數(shù)據(jù)文件或圖像等。(3)保存編輯和打包首選項(xiàng)內(nèi)容到項(xiàng)目文件(.prj)中。(4)對(duì)MATLAB應(yīng)用程序進(jìn)行編譯和打包。當(dāng)用戶構(gòu)建應(yīng)用程序或組件時(shí),MATLAB編譯器可以確定需要哪些MATLAB函數(shù)來支持用戶添加的文件并對(duì)代碼進(jìn)行加密,然后將這些文件封裝為可執(zhí)行文件或組件。

二、使用部署工具2024/3/3在CommandWindow中輸入deploytool命令,將會(huì)出現(xiàn)如圖所示的對(duì)話框。用戶可以選擇新建一個(gè)部署項(xiàng)目,或者打開一個(gè)已有的部署項(xiàng)目。2024/3/31、新建項(xiàng)目選擇File->NewDeploymentProject菜單項(xiàng)或者使用鼠標(biāo)點(diǎn)擊工具條上的New按鈕,將會(huì)彈出“NewDeploymentProject”對(duì)話框

2024/3/3分別選擇左側(cè)列表中的MATLAB編譯器產(chǎn)品,在右側(cè)列表中列出對(duì)應(yīng)的編譯器產(chǎn)品所能創(chuàng)建的應(yīng)用程序類型。MATLABCompiler產(chǎn)品2024/3/3MATLABBuilderEX產(chǎn)品2024/3/3

MATLABBuilderNE產(chǎn)品2024/3/3

MATLABBuilderJA產(chǎn)品2024/3/32、向項(xiàng)目中添加需要編譯的文件在新建項(xiàng)目中的“NewDeploymentProject”對(duì)話框中點(diǎn)擊OK按鈕,即可彈出如下圖所示的對(duì)話框,選擇Project菜單中的AddFile菜單項(xiàng)或點(diǎn)擊工具條中的“AddFile”按鈕,可彈出“Open”對(duì)話框,用戶可以定位所需的文件并把它們添加到項(xiàng)目中。2024/3/33、設(shè)置項(xiàng)目的相關(guān)信息選擇Project菜單的“Setting...”菜單項(xiàng)或點(diǎn)擊工具條上的“Setting...”按鈕,可打開“DeploymentProjectSettings”對(duì)話框,在對(duì)話框中可對(duì)項(xiàng)目的相關(guān)選項(xiàng)進(jìn)行設(shè)置。2024/3/3(1)General選項(xiàng)卡的設(shè)置2024/3/3定義應(yīng)用程序的名稱(Applicationname),如myplot。在OutputDirectories編輯區(qū)域,用戶可以設(shè)置編譯過程中使用的中間目錄(Intermediate)以及輸出目錄(Output)。默認(rèn)情況下,deploytool會(huì)在圖21.4-2所示的Location目錄下創(chuàng)建兩個(gè)子目錄Project_Name\src和Project_Name\distrib,其中Project_Name為在圖21.4-2所示的對(duì)話框的Name中輸入的項(xiàng)目名稱。deploytool會(huì)把編譯過程中產(chǎn)生的中間文件存放到Project_Name\src中間目錄中,把最終編譯好并可用來部署的文件存放到Project_Name\distrib目錄中。

可以選擇是否產(chǎn)生詳細(xì)的輸出信息(GenerateVerboseOutput)??梢赃x擇是否CTF文檔嵌入到應(yīng)用程序中(EmbedCTFarchiveintotheApplication);在MCR選項(xiàng)中,可以選擇在運(yùn)行時(shí)是否加載Java虛擬機(jī)(JVM)等。在“CompilerOptionsFile”區(qū)域,可以定位所需要的選項(xiàng)文件。2024/3/3(2)“ToolboxesonPath”選項(xiàng)用戶可以設(shè)置在項(xiàng)目的創(chuàng)建過程中要搜索哪些工具箱。去掉不必要的工具箱可以減少編譯的時(shí)間,也會(huì)減小CTF的大小。2024/3/3(3)“C/C++Compiler”選項(xiàng)用戶可以修改C/C++編譯器設(shè)置。例如,為封裝的代碼產(chǎn)生調(diào)試信息,可以幫助用戶發(fā)現(xiàn)應(yīng)用程序中的問題。2024/3/3(4)“Warning”選項(xiàng)用戶可以指定在編譯的過程中將在輸出窗口中產(chǎn)生哪些MATLAB編譯器信息。2024/3/3(5)“Packaging”選項(xiàng)用戶可以對(duì)程序打包所需要的信息和文件進(jìn)行設(shè)置。用戶可以指定程序包的名稱(PackageName),將指定的MCR文件包含進(jìn)程序包,同時(shí),也可以指定項(xiàng)目中未包含、但為使MATLAB代碼可以正常運(yùn)行所需要的外部文件。2024/3/34、對(duì)項(xiàng)目進(jìn)行編譯和鏈接經(jīng)過上述2、3兩個(gè)步驟,用戶可選擇DeploymentTool窗口上的Tools菜單中的Build菜單項(xiàng),或者點(diǎn)擊工具條上的“Buildtheproject”按鈕,即可對(duì)項(xiàng)目進(jìn)行編譯和連接。并在“DeployToolOutput”窗口中給出信息提示。2024/3/3在編譯和連接完成后,可以看到在項(xiàng)目所在的路徑下新產(chǎn)生了兩個(gè)子目錄,其中,distrib子目錄中包含文件即為用戶用來部署到目標(biāo)計(jì)算機(jī)中的文件。2024/3/35、打開一個(gè)已有項(xiàng)目在利用mcc命令來將m文件編譯為獨(dú)立的應(yīng)用程序時(shí),可以看到,在目標(biāo)文件夾中的文件中包含了后綴為.prj的文件,該文件即為相應(yīng)的項(xiàng)目文件,可以使用deploytool部署工具來打開該文件。在deploytool中打開該文件后,用戶可以重新修改項(xiàng)目的設(shè)置,然后重新編譯該項(xiàng)目文件。6、將文件打包無論對(duì)于由mcc命令編譯產(chǎn)生的文件或者由deploytool工具編譯產(chǎn)生的文件(.prj),都可以使用deploytool工具打開,然后將需要的文件進(jìn)行打包,以便部署到目標(biāo)計(jì)算機(jī)中。用戶可以對(duì)需要打包的文件進(jìn)行設(shè)置,可以選擇將MATLABCompilerRuntime(MCR)包含到軟件包中,也可以選擇將其它需要的文件包含到軟件包中。選擇Tools菜單中的Package菜單項(xiàng),或者點(diǎn)擊工具條上的“Packagetheproject”按鈕,deploytool工具會(huì)自動(dòng)將所需的文件進(jìn)行打包處理,并且在輸出窗口中給出提示信息。2024/3/3打包信息提示:2024/3/31.Windows操作系統(tǒng)下的部署步驟:(1)打開包含運(yùn)行時(shí)所需的軟件包。(2)在目標(biāo)計(jì)算機(jī)上運(yùn)行MCRInstaller一次。MCRInstaller將打開一個(gè)命令窗口,開始安裝。(3)如果部署的是Java應(yīng)用程序,用戶必須在目標(biāo)計(jì)算機(jī)上設(shè)置Java類所在的路徑。2.Unix操作系統(tǒng)下的部署步驟:(1)安裝MCR。找到MCRInstaller.zip文件,把它復(fù)制到目標(biāo)計(jì)算機(jī)上的文件夾中。該文件夾將成為數(shù)據(jù)庫或應(yīng)用程序的安裝文件夾。然后解壓MCRInstaller.zip文件,并安裝MCR。(2)正確地設(shè)置路徑環(huán)境變量。(3)如果部署的是Java應(yīng)用程序,用戶必須在目標(biāo)計(jì)算機(jī)上設(shè)置類的路徑。三、部署到目標(biāo)計(jì)算機(jī)2024/3/3【例】將包含應(yīng)用程序的軟件包部署到目標(biāo)計(jì)算機(jī)中將例21.4-1生成的軟件包first_pro_pkg.exe復(fù)制到目標(biāo)計(jì)算機(jī)中的某一個(gè)文件夾,然后按照如下步驟來部署。(1)雙擊first_pro_pkg.exe圖標(biāo),運(yùn)行軟件包自解壓程序;2024/3/3(2)自動(dòng)運(yùn)行MCRInstaller.exe程序,安裝MCR。2024/3/32024/3/3(3)安裝完MCR后,即可在軟件包所在的文件夾中找到first_pro.exe文件,雙擊該文件,即可顯示DOS界面,解壓CTF文件,并運(yùn)行應(yīng)用程序。2024/3/3第五節(jié)典型案例介紹2024/3/3以下示例程序均以MATLABCompiler4.8(R2008a)為編譯工具。有關(guān)Compiler4.8的詳細(xì)信息,請(qǐng)參考MATLAB在線幫助文檔:/help/toolbox/compiler/rn/bri8syh-1.html說明:2024/3/31.案例背景在MATLAB中的M文件有兩種:腳本文件(MATLABscripts)和函數(shù)文件(MATLABfunctions)。兩種M文件都是以.m作為文件擴(kuò)展名,但有很大的不同。

MATLAB提供了豐富的繪圖函數(shù),可以實(shí)現(xiàn)強(qiáng)大的繪圖功能。利用句柄圖形(HandlesGraphics)的概念,用戶可以解決復(fù)雜的繪圖問題。本例主要講述利用MATLAB提供的命令來創(chuàng)建圖形窗口、坐標(biāo)軸、按鈕控件,并且在坐標(biāo)軸中繪制圖形,修改圖形的顏色,將代碼保存為MATLAB腳本文件。最后,利用MATLAB編譯器編譯為獨(dú)立的應(yīng)用程序。一、將腳本M文件編譯為獨(dú)立的應(yīng)用程序2024/3/32.編程要點(diǎn)利用5.4中介紹的直接編寫M文件來開發(fā)圖形用戶界面的方法來創(chuàng)建一個(gè)圖形窗口(figure),名稱為“changecurvecolor”;一個(gè)坐標(biāo)軸(axes),在其中繪制正弦曲線;在其上創(chuàng)建四個(gè)下壓按鈕(pushbutton),其中三個(gè)用于改變曲線的顏色,一個(gè)用于關(guān)閉圖形窗口。將代碼保存為腳本文件。利用MATLAB自帶的LccC編譯器,調(diào)用mcc-m命令來編譯M文件。生成的應(yīng)用程序在運(yùn)行時(shí)帶有MS-DOS窗口。利用MicrosoftVisualC++6.0編譯器,調(diào)用mcc-e命令來編譯M文件。生成的應(yīng)用程序在運(yùn)行時(shí)不再帶有MS-DOS窗口。將生成的可執(zhí)行文件打包,以便部署到其它計(jì)算機(jī)中。2024/3/33.實(shí)現(xiàn)(1)創(chuàng)建圖形用戶窗口,代碼保存為curve_color.m文件;(2)設(shè)置MATLAB自帶的LccC編譯器,并編譯M文件。>>mbuild–setup>>mcc-mcurve_color.m-ddir1編譯完成后,在dir1中出現(xiàn)編譯生成的文件。2024/3/3雙擊curve_color.exe文件,即可運(yùn)行應(yīng)用程序,可以看到,程序運(yùn)行時(shí)會(huì)出現(xiàn)MS-DOS窗口。2024/3/3(3)設(shè)置MicrosoftVisualC++6.0編譯器,并編譯M文件。>>mbuild–setup>>mcc-mcurve_color.m-ddir1編譯完成后,在dir1中出現(xiàn)編譯生成的文件。2024/3/3雙擊curve_color.exe文件,即可運(yùn)行應(yīng)用程序,可以看到,程序運(yùn)行時(shí)不會(huì)出現(xiàn)MS-DOS窗口。(4)利用DeploymentTool將應(yīng)用程序進(jìn)行打包處理。2024/3/31.案例背景函數(shù)M文件也是用戶使用MATLAB編程時(shí)經(jīng)常使用的文件形式之一。將MATLAB代碼封裝為函數(shù)M文件的形式,可以使得M文件能夠接受用戶的輸入信息,并將處理的結(jié)果返回給用戶。由其是對(duì)于大型的應(yīng)用程序,可以將其劃分為一個(gè)個(gè)小的功能模塊,每一個(gè)功能模塊使用函數(shù)M文件來實(shí)現(xiàn),最終集成為整個(gè)應(yīng)用程序。使用函數(shù)M文件,用戶也可以很方便地?cái)U(kuò)展MATLAB的工具箱,等等。本例講述如何將函數(shù)M文件編譯為獨(dú)立的應(yīng)用程序。將上述示例程序修改為函數(shù)M文件保存,并且調(diào)用MATLAB編譯器來創(chuàng)建獨(dú)立的應(yīng)用程序。二、將函數(shù)M文件編譯為獨(dú)立的應(yīng)用程序2024/3/32、編程要點(diǎn)要將curve_color.m應(yīng)用程序修改為函數(shù)M文件,用戶需要執(zhí)行如下的操作:(2)代碼的開頭添加function關(guān)鍵字來定義函數(shù)的名稱。functioncurve_colorh0=figure('toolbar','none',...'units','normalized',...'position',[0.20.20.60.5],...'name','changecurecolor');…function為MATLAB的關(guān)鍵字,用來定義函數(shù)。curve_color為函數(shù)的名稱,函數(shù)名稱必須按照MATLAB中對(duì)變量名稱的約定來定義。函數(shù)也可以選擇帶輸入和輸出參數(shù),例如:function[out1out2…]=funname(in1,in2,…)在這里選擇不帶輸入和輸出參數(shù)。2024/3/3(2)修改程序的代碼稱。由于定義各個(gè)按鈕的回調(diào)函數(shù)(Callback)為字符串形式,回調(diào)函數(shù)的代碼在基本(base)工作空間中執(zhí)行,其中的set語句引用的圖形對(duì)象的句柄必須保存在基本工作空間中。而將M文件定義為函數(shù)M文件后,圖形對(duì)象的句柄是保存在了函數(shù)(caller)工作空間中的,而這兩個(gè)工作空間中的變量是不能直接相互訪問的。所以,如果不修改代碼,則運(yùn)行程序并點(diǎn)擊按鈕后會(huì)出現(xiàn)如下錯(cuò)誤,提示句柄無效:???Errorusing==>setInvalidhandleobject.???ErrorwhileevaluatinguicontrolCallback要解決這個(gè)問題,有兩條途徑:將函數(shù)M文件中的變量定義為全局變量全局變量的作用于為整個(gè)MATLAB工作空間,全局變量一旦定義,MATLAB的任何函數(shù)都可以訪問和修改。要把變量定義為全局變量,只需調(diào)用global命令即可。global命令的調(diào)用格式如下:globalXYZ其中,X、Y、Z表示要定義的全局變量的名稱。可以同時(shí)定義多個(gè)全局變量,變量的個(gè)數(shù)沒有嚴(yán)格的限制。用戶在引用全局變量時(shí),必須調(diào)用global命令來事前聲明全局變量,然后才能調(diào)用全局變量。清除全局變量時(shí),需調(diào)用clear命令:clearglobalvar%其中,var為全局變量的名稱。

2024/3/3將函數(shù)M文件中的變量指派到基本工作空間中assignin將函數(shù)M文件中的變量的值指派給指定工作空間中的變量。函數(shù)的調(diào)用格式如下:assignin(ws,'var',val);其中,ws為標(biāo)識(shí)工作空間的字符串,其值可以為“base”或“caller”;val為函數(shù)M文件中的局部變量,“var”為指定工作空間ws中的變量,若變量“var”在指定工作空間中不存在,則MATLAB自動(dòng)創(chuàng)建該變量。修改程序的代碼,將圖形句柄k的值指派到基本工作空間中的變量k:assignin('base','k',k);修改后的M文件見curve_color2.m。函數(shù)M文件的編譯和部署的方法與腳本M文件相同,在此不贅述。2024/3/31.案例背景MATLAB提供了一個(gè)專門用于GUI程序設(shè)計(jì)的快速開發(fā)環(huán)境-GUIDE。利用GUIDE這一界面設(shè)計(jì)工具集,用戶不需要編寫任何代碼,即可以通過鼠標(biāo)的簡(jiǎn)單拖拽就能迅速地產(chǎn)生各種GUI控件,并可以根據(jù)要求方便地修改它們的外形、大小、顏色等屬性,從而幫助用戶方便地設(shè)計(jì)出各種符合要求的圖形用戶界面程序(GUI)。此外,比較復(fù)雜的MATLAB程序都是由多個(gè)M文件組成的。例如:一個(gè)應(yīng)用程序有一個(gè)主函數(shù)M文件,主函數(shù)M文件又要調(diào)用其它的兩個(gè)M文件,而這兩個(gè)M文件又可能會(huì)調(diào)用其它的M文件,從而構(gòu)成比較復(fù)雜的應(yīng)用程序。對(duì)由多個(gè)M文件組成的應(yīng)用程序的編譯也是用戶需要掌握的。三、對(duì)由GUIDE創(chuàng)建的GUI程序編譯為可獨(dú)立運(yùn)行的程序2024/3/32、編程要點(diǎn)

MATLAB編譯器在編譯的過程中會(huì)有“依存關(guān)系檢查”這一步驟,MATLAB編譯器會(huì)對(duì)用戶用于編譯的M文件進(jìn)行檢查,確定用戶提供的M文件需要調(diào)用哪些M文件以及這些M文件又要調(diào)用哪些M文件,等等。此外,MATLAB編譯器也分析用戶提供的M文件還要調(diào)用哪些MATLAB內(nèi)置函數(shù)以及MATLAB對(duì)象。在依存關(guān)系檢查中創(chuàng)建的MATLAB文件(M文件和MEX文件)列表用于創(chuàng)建CTF文檔,CTF文檔包含應(yīng)用程序正常執(zhí)行所需要的文件。這些文件被加密并壓縮到單個(gè)文件中以方便部署,目錄信息也包含在其中,以確保目錄中的文件能被正確地安裝到目標(biāo)計(jì)算機(jī)。

因此,在對(duì)包含多個(gè)M文件的MATLAB程序進(jìn)行編譯時(shí),用戶只需在mcc命令行中包含主函數(shù)M文件即可,MATLAB編譯器會(huì)自動(dòng)查找所需要的其它M文件,不需要用戶逐個(gè)進(jìn)行編譯,用戶也不需要擔(dān)心會(huì)有哪些函數(shù)會(huì)被遺漏。

由GUIDE創(chuàng)建的應(yīng)用程序包括M文件和FIG文件,用戶在利用MATLAB編譯器進(jìn)行編譯時(shí),其編譯方法與普通的M文件的編譯是一樣的。如果存在多個(gè)M文件,則只需對(duì)主M文件進(jìn)行編譯。2024/3/31.案例背景C語言是目前世界上流行、使用最廣泛的面向過程的高級(jí)程序設(shè)計(jì)語言,許多應(yīng)用軟件都是用C語言編寫的。C語言提供了基本的函數(shù)庫,程序員可以使用這些函數(shù)庫來完成復(fù)雜的運(yùn)算,處理大量的數(shù)值數(shù)據(jù)。但有時(shí),這些基本的函數(shù)往往不能滿足要求,需要程序員來編寫高級(jí)函數(shù)來完成所需的運(yùn)算,如矩陣運(yùn)算等。而MATLAB具有幾百個(gè)數(shù)學(xué)函數(shù),可以完成數(shù)值分析、模擬與運(yùn)算等強(qiáng)大的功能。因此,如果能在C開發(fā)環(huán)境中調(diào)用MATLAB強(qiáng)大的函數(shù)庫,則能為應(yīng)用程序的開發(fā)提供很大的方便。

可以利用MATLAB編譯器將MATLAB函數(shù)打包成C或C++共享庫,然后在C或C++編程時(shí)調(diào)用這些共享庫中的函數(shù),從而就像從MATLAB命令行中來調(diào)用這些函數(shù)一樣方便。四、將MATLAB程序編譯為C共享庫2024/3/32.編程要點(diǎn)(1)使用mcc命令創(chuàng)建C共享庫假設(shè)要將myfilename.m文件編譯為C共享庫,可以使用下面的命令:mcc-Bcsharedlib:libnamemyfilename.m-v其中,-Bcsharedlib選項(xiàng)是一個(gè)束選項(xiàng),它擴(kuò)展為-Wlib:<libname>-Tlink:lib-Wlib:<libname>選項(xiàng)讓MATLAB編譯器生成一個(gè)函數(shù)打包器,名稱為libname。-Tlink:lib指定目標(biāo)輸出為共享庫。用戶還可以使用下面的命令來生成C共享庫myfilename.dll:mcc-lmyfilename.m-v

如果要將多個(gè)M文件編譯為C共享庫,可以使用如下的命令:mcc-lmyfilename1.mmyfilename2.mmyfilename3.m-v生成的C共享庫的名稱為myfilename1.dll。2024/3/3(2)編寫驅(qū)動(dòng)程序調(diào)用MATLAB編譯器生成的共享庫的所有驅(qū)動(dòng)程序一般都有類似的結(jié)構(gòu):聲明變量,處理和驗(yàn)證輸入?yún)?shù)。調(diào)用mclInitializeApplication函數(shù)來初始化MATLAB庫。該函數(shù)用來設(shè)置全局MCR選項(xiàng)。在調(diào)用C共享庫時(shí),每一個(gè)庫都有一個(gè)與之相對(duì)應(yīng)的MCR示例。如果一個(gè)應(yīng)用程序調(diào)用了兩個(gè)MATLAB編譯器產(chǎn)生的共享庫,則會(huì)創(chuàng)建兩個(gè)MCR實(shí)例。在用戶創(chuàng)建第一個(gè)MCR實(shí)例前,必須調(diào)用mclInitializeApplication函數(shù)來設(shè)置MCR的選項(xiàng),該函數(shù)將MCR選項(xiàng)應(yīng)用于所有MCR實(shí)例。每個(gè)庫調(diào)用一次<libname>Initialize函數(shù),來創(chuàng)建庫所需要的MCR實(shí)例。該函數(shù)執(zhí)行庫的初始化工作,例如:釋放CTF文檔,啟動(dòng)MCR實(shí)例等。調(diào)用每個(gè)庫的輸出函數(shù),使用C-MexAPI函數(shù)來處理函數(shù)的輸入和輸出參數(shù)。2024/3/3當(dāng)應(yīng)用程序不再需要調(diào)用指定的庫函數(shù)時(shí),調(diào)用每個(gè)庫的<libname>Terminate函數(shù),來銷毀相關(guān)的MCR實(shí)例,釋放與MCR相關(guān)的資源。一旦一個(gè)庫被終止,則該庫的輸出函數(shù)在應(yīng)用程序中就不能被再調(diào)用。當(dāng)應(yīng)用程序不再需要調(diào)用任何庫時(shí),調(diào)用mclTerminateApplication函數(shù)。該函數(shù)釋放MCR實(shí)例所使用的應(yīng)用程序級(jí)別的資源。該函數(shù)被調(diào)用后,應(yīng)用程序就不能再使用任何庫了。清除變量,關(guān)閉文件,等等,并退出應(yīng)用程序。3.編寫驅(qū)動(dòng)程序要編譯驅(qū)動(dòng)程序,使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論