版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2024/3/3合肥工業(yè)大學機械與汽車工程學院MATLAB程序編譯山東省科學院計算中心劉煥進E-mail:liuhuanjinliu@2024/3/3MATLAB編譯器的工作機理
MATLAB編譯器的安裝與配置編譯部署
典型案例介紹本章的主要內容包括:2024/3/3第一節(jié)MATLAB編譯器的工作機理2024/3/3MATLAB編譯器產品簡介;
MATLAB編譯器的功能;幾個要點:關于MATLAB編譯器產生的應用程序或運行庫;關于打包器(wrapper)文件;組件技術文件(CTF);本節(jié)的主要內容包括:2024/3/3MATLAB編譯器產品是MATLAB應用程序集成與發(fā)布的一種重要工具,它是一個運行于MATLAB環(huán)境的獨立工具。MATLAB編譯器可以將M文件、MEX文件、MATLAB對象或其它MATLAB代碼轉換為C/C++代碼,然后再調用外部C/C++編譯器把產生的源代碼編譯、鏈接成獨立的應用程序、庫、COM對象以及Excel插件。
MATLAB編譯器產品簡介2024/3/3(1)將M文件編譯成為可以在UNIX、Windows和Macintosh操作系統(tǒng)上獨立運行的應用程序。獨立運行的應用程序就是在其運行過程中可以不需要MATLAB軟件的同時運行,此外,也可以在沒有安裝MATLAB軟件的計算機上運行這些應用程序。(2)將M文件編譯成為C和C++共享函數庫(在Windows系統(tǒng)上應用的動態(tài)鏈接庫DLLs,Linux和UNIX系統(tǒng)下為共享的庫文件)。MATLAB編譯器的功能2024/3/3(3)MATLABBuilderEX可以將MATLAB函數打包,以便MicrosoftExcel用戶可以通過VBA在Excel程序中訪問這些函數。(4)MATLABBuilderJA可以將MATLAB中的M代碼函數封裝到Java類中。Java類是Java代碼的一部分,包含了Java方法以及執(zhí)行動作的單元。(5)MATLABBuilderNE可以將MATLAB函數打包,以便.NET用戶可以從任何CLS相兼容的語言中訪問這些函數。2024/3/3一、關于MATLAB編譯器產生的應用程序或運行庫
當用戶打包和部署由MATLAB編譯器產生的應用程序和運行庫時,必須包含MATLAB編譯器運行庫(MATLABCompilerRuntime,簡稱MCR
)以及由編譯器產生的一系列支持文件。同時,必須在目標計算機上指定這些文件的系統(tǒng)路徑,以便系統(tǒng)能夠找到這些文件。MATLAB編譯器產生的應用程序或運行庫包括兩部分:一個平臺相關的二進制文件以及一個包含MATLAB函數和數據的文檔(CTF)。應用程序的二進制文件由一個主函數組成,而運行庫的二進制文件由多個用戶輸出的函數組成。幾個要點:
2024/3/3二、關于打包器(wrapper)文件
要產生用戶指定的、平臺相關的二進制文件,編譯器產生一個或多個打包器文件。打包器文件提供了指向被編譯的M代碼的接口(函數),通過這些接口,打包器文件可以創(chuàng)建MATLAB編譯器生成的代碼與所支持的可執(zhí)行程序(如獨立應用程序或庫)之間的鏈接。打包器文件依據執(zhí)行環(huán)境的不同而不同。
打包器文件主要實現如下功能:(1)通過特定的接口(函數)執(zhí)行初始化和終止工作。(2)定義包含路徑信息、密鑰以及MCR所需的其它信息的數據數組。(3)提供必需的代碼,用來將調用信息從接口函數傳遞給包含在MCR中的MATLAB函數。(4)對于應用程序,包含主函數(main函數)。(5)對于運行庫,包含每個公開的M函數的入口點。當使用編譯器產生的運行庫時,在客戶端代碼中調用庫初始化和終止例程。2024/3/3三、組件技術文件(CTF)
組件技術文件(ComponentTechnologyFile,簡稱CTF)。MATLAB編譯器在編譯的同時也產生組件技術文件(CTF),該文件獨立于應用程序或運行庫,并于每個操作系統(tǒng)平臺相關的。該文件以.ctf作為后綴,包含定義應用程序或運行庫的MATLAB函數和數據,并且在默認的情況下,內嵌于共享的C/C++庫和獨立的應用程序的二進制文件中。2024/3/3第二節(jié)MATLAB編譯器的安裝及配置2024/3/3
安裝要求;
編譯器的安裝;編譯器的配置;本節(jié)的主要內容包括:2024/3/3一、安裝要求在安裝MATLAB編譯器之前,用戶必須確保在系統(tǒng)中安裝了合適版本的MATLAB軟件。MathWorks公司的網站上提供了相關的信息,用戶可在以下網頁中查找編譯器的相關信息:
/products/compiler/requirements.htmlMATLAB編譯器的正常運行對操作系統(tǒng)或內存都沒有特別的要求,只要操作系統(tǒng)和內存都支持MATLAB軟件的正常運行即可。1、系統(tǒng)要求2024/3/3MATLAB編譯器還需要在系統(tǒng)中安裝其所支持的ANSIC/C++編譯器,例如:BorlandC/C++、MicrosoftVisualC++、WatcomC/C++、LccC編譯器等。通常,MATLAB編譯器都支持第三方編譯器的當前版本以及舊的版本。對于MATLAB以及MATLAB編譯器所支持的最新的編譯器列表,請參照MathWorks公司技術支持部門的技術備忘錄,其網址為:/support/tech-notes/1600/1601.shtml2、支持的第三方編譯器2024/3/3(1)支持的ANSIC/C++Windows平臺編譯器使用如下的32位的C/C++編譯器可以產生32位Windows動態(tài)鏈接庫(DLLs)或Windows應用程序(以MATLABV4.14(R2010b)編譯器為例):(1)LccC2.4.1(包含于MATLAB中),這僅是個C編譯器,不針對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平臺編譯器在Solaris平臺上,MATLAB編譯器支持本地系統(tǒng)編譯器;在Linux、Linuxx86-64和MacOSX平臺上,MATLAB編譯器支持gcc和g++。2024/3/3二、編譯器的安裝MATLAB編譯器包含于MATLAB軟件產品中。因此,如果用戶初次安裝MATLAB軟件產品,可以在安裝的過程中選中要安裝的MATLAB編譯器產品,然后執(zhí)行標準安裝。如果在初次安裝的過程中沒有選中MATLAB編譯器產品,可以重新運行安裝程序,選中要安裝的MATLAB編譯器產品,然后安裝即可。1、安裝MATLAB編譯器產品
2024/3/3安裝MATLAB軟件的過程中選擇安裝編譯器產品2024/3/3要安裝ANSIC/C++編譯器,需要執(zhí)行包含有C/C++編譯器的安裝向導,正常安裝并正確配置即可。用戶在安裝C/C++編譯器時可能會遇到有關配置的問題,下表提供了有關配置信息的常見問題。2、安裝ANSIC/C++編譯器
2024/3/3問題描述安裝選項建議完全安裝編譯器。如果只安裝一部分,可能會忽略MATLAB編譯器所必需的組件安裝調試器文件對于MATLAB編譯器產品來說,沒有必要安裝調試器(DBG)文件微軟基礎類庫(MFC)不需要16位動態(tài)鏈接庫(DLLs)不需要ActiveX不需要從命令行中運行選擇編譯器從命令行運行的所有相關選項更新注冊表根據安裝程序需要而定安裝MicrosoftVisualC++6.0如果需要改變編譯器的安裝位置,就必須改變Common文件夾的位置;不要改變VC98文件夾的默認位置2024/3/31、關于mbuild的應用
三、編譯器的配置用戶使用mbuild腳本可以方便地指定一個選項文件(optionsfile),該選項文件允許用戶進行如下操作: ●為每個可支持的編譯器設置默認的編譯器和連接器選項; ●修改編譯器或編譯器設置; ●創(chuàng)建應用程序。mbuild簡化了設置C或C++編譯器的過程,用戶只需使用mbuild的setup選項即可一次性確定所要使用的第三方編譯器。MATLAB編譯器(mcc)產品在一定的條件下自動啟動mbuild。特別地,mcc–m或mcc-l(小寫的L)將啟動mbuild來執(zhí)行編譯和連接。2024/3/32、
配置ANSIC或C++編譯器
說明:選項文件包含用來控制已安裝的編譯器的標志或設置,選項文件是與編譯器相關的,MathWorks公司對不同的C/C++編譯器都提供了不同的選項文件。用戶可以根據需要修改選項文件的內容,但在通常情況下,用戶不必關心選項文件的內容,而只是簡單地使用mbuild的setup選項來配置C或C++編譯器即可。使用下面的命令可以選擇一個默認的編譯器:mbuild–setup2024/3/3【例】配置編譯器
>>mbuild–setup%調用mbuild腳本來啟動配置PleasechooseyourcompilerforbuildingstandaloneMATLABapplications:
%啟動MATLAB的自定位系統(tǒng),MATLAB會自動搜索系統(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%結束配置Tryingtoupdateoptionsfile:C:\DocumentsandSettings\Administrator\ApplicationData\MathWorks\MATLAB\R2008a\compopts.batFromtemplate:D:\PROGRA~1\MATLAB\R2008a\bin\win32\mbuildopts\msvc60compp.batDone...2024/3/3驗證編譯器配置是否正確?
在當前目錄中創(chuàng)建test.m文件,文件內容很簡單:彈出信息框,顯示“Hello,World!”信息。在命令窗口中調用mcc對test.m文件進行編譯:mcc-mtest.m編譯完成后,產生test.exe文件,用鼠標雙擊即可正常運行,表明編譯器設置正確。2024/3/33、選項文件MATLAB軟件中包含了用于Windows平臺和UNIX平臺的預置選項文件,如下表所列(以MATLABR2008a為例)。(注:這些選項僅適用于32位MATLAB軟件)。通常情況下,用戶不必關心選項文件是如何工作的。當然,用戶也可以根據自己的需要來修改選項文件。2024/3/3選項文件編譯器Windows平臺(選項文件位于:{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平臺(選項文件位于:{matlabroot根目錄}/bin/目錄下mbuildopts.shSolaris平臺下,使用本地的ANSI編譯器;對于Linux和Macintosh平臺,使用gccMATLAB中的預置選項文件列表:
2024/3/3要定位在Windows系統(tǒng)下的選項文件,mbuild腳本按照如下的順序進行搜索:(1)當前目錄;(2)Windows系統(tǒng)的用戶配置文件目錄。Windows系統(tǒng)的用戶配置目錄中包含了諸如桌面外觀、最近使用的文件、“開始”菜單中的項目等用戶信息。mbuild將在-setup過程中創(chuàng)建的選項文件compopts.bat保存到用戶配置文件目錄的一個子目錄中(例如C:\DocumentsandSettings\Administrator\ApplicationData\MathWorks\MATLAB\R2008a),如下圖所示。初次運行mbuild命令時,它會在上述兩個路徑中搜索選項文件,一旦找到選項文件則停止搜索,并使用該選項文件。如果沒有搜索到選項文件,則mbuild搜索計算機上已安裝的編譯器,并為該編譯器使用MATLAB預置的選項文件;如果計算機上有多個編譯器,則提示用戶選擇一個編譯器。關于Windows操作系統(tǒng)中的選項文件2024/3/32024/3/3要定位在UNIX系統(tǒng)下的選項文件,mbuild腳本按照如下的順序進行搜索:(1)當前目錄;(2)$HOME/.matlab/current_release;(3)matlabroot/bin。
關于Unix操作系統(tǒng)中的選項文件2024/3/3第三節(jié)編譯2024/3/3
有關MATLAB編譯器技術
mcc命令詳解輸入輸出文件本節(jié)的內容包括:2024/3/3一、有關MATLAB編譯器技術MATLAB編譯器4.0使用MATLAB運行庫(MCR),MCR是一個使M文件能夠執(zhí)行的共享庫的獨立集合。使用MCR,可以在沒有安裝MATLAB軟件的計算機上執(zhí)行MATLAB文件。MCR提供了對MATLAB中幾乎所有函數的支持。MCR使用了線程封鎖技術,保證一次只能有一個線程允許訪問MCR。1、MATLAB編譯器運行庫(MATLABCompilerRuntime)2024/3/3編譯器4.0使用了組件技術文件(CTF)來容納可部署的程序包。所有的M文件都被加密到CTF文檔中,加密時使用高級加密標準(AES)密碼系統(tǒng),其對稱密鑰使用1024位的RSA來保護。MATLAB編譯器所產生的每一個應用程序或共享庫都有相關聯(lián)的CTF文檔。文檔中包含所有與組件相關聯(lián)的、基于MATLAB的內容(M文件、MEX文件,等等)。當CTF檔案檔案解壓到用戶的系統(tǒng)中時,這些文件仍保持加密狀態(tài)。2、組件技術文件2024/3/3(1)依存關系檢查 分析、判斷用戶提供的M文件、MEX文件以及P文件所依存的函數之間的關系,并創(chuàng)建文件列表。該列表包括由輸入的M文件調用的所有M文件以及這些M文件所調用的文件,等等。此外,還包括所有內置函數以及MATLAB對象。(2)封裝代碼生成產生創(chuàng)建目標組件所需要的所有源代碼,包括: ●應用于命令行的M函數的C/C++接口代碼(ex21_3_1_main.c)。對于數據庫和組件,該文件包括所有的接口函數。 ●組件數據文件,該文件包含運行時執(zhí)行M代碼所需的信息。這些信息包括路徑信息以及用于加載保存在組件的CTF文檔中的M代碼的密鑰。3、組件創(chuàng)建過程2024/3/3(3)CTF文檔創(chuàng)建在依賴檢查中創(chuàng)建的MATLAB文件(M文件和MEX文件)列表用于創(chuàng)建CTF文檔。CTF文檔包含組件正常執(zhí)行所需要的文件。這些文件被加密并壓縮到單個文件中以方便部署,目錄信息也包含在其中,以確保目錄中的文件能被正確地安裝到目標計算機。(4)C/C++編譯將在“封裝器代碼生成”中產生的C/C++文件編譯為目標代碼。用戶在mcc命令行中指定的C/C++代碼也同時被編譯。(5)連接將產生的目標文件和必需的MATLAB庫文件相連接,并生成最終的組件。
C/C++編譯和連接使用包含在MATLAB編譯器產品中的mbuild應用程序。2024/3/3MATLAB編譯器的編譯過程2024/3/3二、mcc命令詳解1、mcc命令的語法mcc[-options]mfile1[mfile2...mfileN][C/C++file1...C/C++fileN]其中,參數options可以選擇如下的值:(1)-a
使用–afilename來指定直接添加到CTF文檔中的文件,也可以使用多個-a選項。MATLAB編譯器在MATLAB路徑上查找這些文件,如果文件不在MATLAB路徑上,需要指定文件的完整路徑名稱。如果-a選項中只包括目錄的名稱,則目錄中的所有文件將循環(huán)添加到CTF文檔中。例如:將當前工作目錄中的testdir目錄及其子目錄中的所有文件都添加到CTF文檔中,并且目錄的子樹也保存到CTF文檔中。
2024/3/3mcc–mhello.m–a./testdir如果在文件名中包含通配符(*),則只有在目錄中符合給定格式的文件被添加的CTF文檔中,而子目錄中的文件卻不會被添加。例如:mcc-mhello.m-a./testdir/*在本例中,在./testdir目錄中的所有文件都會被添加到CTF文檔中,而在./testdir目錄下的所有子目錄中的文件則不被添加。mcc-mhello.m-a./testdir/*.m./testdir目錄下所有擴展名為.m的文件都將被添加到CTF文檔檔案中,而在./testdir目錄下的所有子目錄中的文件則不被添加。2024/3/3其中,參數options可以選擇如下的值:(1)-a
使用–afilename來指定直接添加到CTF文檔中的文件,也可以使用多個-a選項。MATLAB編譯器在MATLAB路徑上查找這些文件,如果文件不在MATLAB路徑上,需要指定文件的完整路徑名稱。如果-a選項中只包括目錄的名稱,則目錄中的所有文件將循環(huán)添加到CTF文檔中。例如:將當前工作目錄中的testdir目錄及其子目錄中的所有文件都添加到CTF文檔中,并且目錄的子樹也保存到CTF文檔中。
2024/3/3(2)-b產生與Excel兼容的公式函數產生一個VisualBasic文件(.bas),該文件包含一個用于編譯器產生的COM對象的Excel公式函數(MicrosoftExcelFormulaFunction)界面,允許MATLAB函數作為單元公式函數使用。(3)-B指定束(bundle)文件使用指定文件的內容來替代在mcc命令行中的文件。使用語法為:-Bfilename[:<a1>,<a2>,...,<an>]束文件filename應只包含mcc命令行選項、相應的參數、和/或其它文件名。束文件可以包含其它-B選項。下表列出了MATLAB編譯器產品中的束文件列表。束文件創(chuàng)建結果內容cpplibC++庫-Wcpplib:<shared_library_name>-Tlink:libcsharedlibC共享庫-Wlib:<shared_library_name>-Tlink:lib2024/3/3(4)-c(小寫C)只產生C代碼當使用宏選項時,只產生C封裝代碼,而不啟動mbuild而產生獨立的應用程序。該選項相當于放在mcc命令行的末尾的-Tcodegen。(5)-C(大寫C)默認情況下不嵌入CTF文檔缺省情況下,指示mcc不在C/C++文件、main/Winmain共享庫和獨立的二進制文件中嵌入CTF文檔。(6)-d指定輸出目錄-ddirectory將編譯產生的輸出存放到由-d選項指定的目錄directory中。2024/3/3(7)-e禁止MS-DOS命令窗口當產生獨立的應用程序時,禁止MS-DOS命令窗口的出現,使用-e來替換-m選項。該選項僅用于Windows系統(tǒng)。使用-R選項來產生錯誤日志文件:mcc-e-R-logfile,"log_file.txt"-vfunction_name該宏等價于:-WWinmain-Tlink:exe使用-e選項需要應用程序是使用微軟的編譯器(例如MicrosoftVisualStudioExpress)編譯的,而不是使用MABLAB自帶的編譯器編譯的。(8)-f指定的選項文件-ffilename使用指定的選項文件覆蓋默認的選項文件。該選項可使用戶在調用不同的MATLAB編譯器產品時使用不同的ANSI編譯器,該選項直接傳遞給mbuild腳本。MathWorks建議用戶不使用該選項,而直接使用mbuild–setup命令。2024/3/3(9)-F指定的項目文件。指定mcc使用包含在指定的項目文件(.prj)中的設置。當調用mcc時,使用-Fproject_name.prj用來指定項目文件的名稱為project_name。該選項使得.prj文件及其所有附屬的設置都返回給mcc。使用mcc或deploytool創(chuàng)建的項目文件都可以用到該選項中。(10)-g產生調試信息包含由MATLAB編譯器產生的C/C++代碼的調試信息,mbuild會將合適的調試標志傳遞給C/C++編譯器。調試選項使得用戶可以追溯在什么地方產生了錯誤:是在MCR的初始化、函數的調用還是終止例程中產生了錯誤。該選項不允許用戶使用C/C++調試器來調試用戶的M文件。(11)-G同-g,僅用于調試2024/3/3(12)-I添加目錄到引用路徑中 向引用目錄列表中添加新的目錄。每一個-I選項都會在搜索路徑的列表的開頭添加一個目錄。例如:-I<directory1>-I<directory2> 設置搜索路徑,從而directory1首先用于M文件的搜索,接下來是directory2。該選項對于不能訪問MATLAB路徑的獨立編譯來說是很重要的。(13)-l(小寫L)生成函數庫 該選項為命令行中的每一個M文件生成一個庫封裝函數,并調用C編譯器來創(chuàng)建共享庫,該共享庫導出這些函數。庫的名字與組件的名字相同,也就是命令行上的第一個M文件的名字。該宏等價于:-Wlib:stringlink:lib(14)-m產生一個獨立的應用程序該宏等價于:-Wmain-Tlink:exe。 使用-e選項代替-m選項來產生獨立的應用程序,同時禁止MS-DOS命令窗口的出現。使用-e選項需要應用程序是使用Microsoft的編譯器(例如MicrosoftVisualStudioExpress)編譯的。2024/3/3(15)-M定義編譯時間選項-Mstring將string直接傳遞給mbuild腳本。這提供了一種定義編譯時間選項的有用機制,例如:”-Dmacro=value”。如果使用多個-M選項,只有最右邊的一個起作用。(16)-N清除路徑有效清除最小目錄集以外的路徑,下列的核心目錄及其子目錄除外:matlabroot/toolbox/matlabmatlabroot/toolbox/localmatlabroot/toolbox/compiler/deploy在mcc命令行中包含-N選項,允許用戶替換原始路徑中的目錄,同時保留引用目錄的相對順序。出現在原始路徑中的引用目錄中的所有子目錄也將被替換。此外,-N選項保留用戶已經引用、但不在matlabroot/toolbox路徑下的所有目錄。2024/3/3(17)-o指定輸出文件名稱指定最終可執(zhí)行文件的名稱(僅用于獨立的應用程序)。使用-ooutputfile來命名MATLAB編譯器產生的最終可執(zhí)行輸出文件。在指定的名稱后將添加合適的、與平臺相關的擴展名(如.exe用于Windows獨立應用程序)。(18)-p向編譯路徑中添加目錄和選項-N聯(lián)合使用,可以添加matlabroot/toolbox路徑下指定的目錄和子目錄到MATLAB編譯路徑下。-N-pdirectory其中,directory是要添加的目錄。如果directory不是絕對路徑,則假定它在當前工作目錄下。以下規(guī)則定義了這些目錄是如何在編譯路徑中引用的:●如果目錄在原始MATLAB路徑上,則目錄及其子目錄都被添加到編譯路徑下?!袢绻夸洸辉谠糓ATLAB路徑上,在該目錄不會被添加到編譯路徑下。用戶可以使用-I選項來添加。
2024/3/3(19)-R運行時間(僅適用于獨立的應用程序)提供MCR運行庫選項。使用-Roption可以提供如下表所列的運行選項。選項描述-nojvm不使用Java虛擬機(JVM)-nojit不使用MATLABJIT(用于加速M文件執(zhí)行的二進制代碼生成)-nodisplay禁止MATLABnodisplay運行時間警告(20)-S創(chuàng)建單個MCR當編譯多個COM對象時,創(chuàng)建單個MCR,每個組件的實例都使用相同的MCR。該選項需要MATLABBuilderNE編譯器。2024/3/3(21)-T指定產生目標文件的階段和類型使用-Ttarget來定義輸出的類型。有效的target的值如下表所列。(22)-v詳述-v選項傳遞給mbuild并顯示關于mbuild的信息。包括:MATLAB編譯器版本號、源文件名稱、產生的輸出文件名稱、mbuild的啟動。目標描述codegen產生C/C++封裝文件。缺省值為codegencompile:exe同codegen,同時將C/C++文件編譯為適合連接進獨立應用程序里的目標形式compile:lib同codegen,同時將C/C++文件編譯為適合連接進共享庫/DLL里的目標形式link:exe同compile:exe,同時將目標文件連接進獨立的應用程序link:lib同compile:lib,同時將目標文件連接進共享庫/DLL2024/3/3(23)-w警告信息顯示警告信息。使用-woption[:<msg>]來控制警告信息的顯示。有效的語法形式如下表所示。語法描述-wlist產生一個將<string>映射到警告信息的表格-wenable允許全部的警告信息-wdisable[:<string>]禁止與<string>相關聯(lián)的警告信息。去掉<string>將禁止所有的警告信息-wenable[:<string>]允許與<string>相關聯(lián)的警告信息。去掉<string>將允許所有的警告信息-werror[:<string>]將與<string>相關聯(lián)的警告信息當作錯誤信息。去掉<string>將所有的警告信息當作錯誤信息2024/3/3(24)-W打包器文件使用-Wtype來控制打包器函數的創(chuàng)建。用戶提供一組函數,MATLAB編譯器產生打包器函數以及合適的全局變量定義。下表列出了有效的選項。類型描述main產生一個POSIX外殼main()函數。(POSIX為可移植操作系統(tǒng)接口)lib:<string>當將編譯器產生的代碼編譯為一個較大的應用程序時,創(chuàng)建一個C接口,并且產生一個初始化和終止函數。該選項也產生一個頭文件,該頭文件包含指定M文件中的所有公開函數的原型。<string>指定了生成的C/C++文件以及頭文件的基本文件名。產生一個包含所有非靜態(tài)的函數名稱的.exports文件cpplib:<string>當將編譯器產生的代碼編譯為一個較大的應用程序時,創(chuàng)建一個C++接口,并且產生一個初始化和終止函數。該選項也產生一個頭文件,該頭文件包含指定M文件中的所有公開函數的原型。<string>指定了生成的C/C++文件以及頭文件的基本文件名。產生一個包含所有非靜態(tài)的函數名稱的.exports文件none不產生打包器文件。默認值為none2024/3/3(25)-Y許可文件使用-Ylicense.dat_file來使用指定的參數覆蓋默認的license.dat文件。(26)-z指定路徑為庫文件和引用文件指定路徑。使用-zpath來指定編譯器庫文件和引用文件所使用的路徑為path,從而代替由matlabroot返回的路徑。(27)-?幫助信息在命令提示下顯示MATLAB編譯器的幫助信息。2024/3/32、使用mcc命令(1)編譯器選項可以給mcc指定一個或多個MATLAB編譯器選項。例如:mcc-m-gmyfile.m宏是MATLAB提供的編譯器選項,使得用戶不必手工組合多個選項來實現指定的編譯工作。例如:選項-l與下列宏等價:-Wlib-Tlink:lib選項-m與下列宏等價:-Wmain-Tlink:exe2024/3/3(2)組合選項可以把不帶參數的選項組合到一起使用。例如:mcc-mgmyfile.m帶參數的選項通常不能組合到一起,除非把帶參數的選項及其參數放置在命令列表的最后。例如:下面是正確的用法:%選項單獨列出mcc-v-Wmain-Tlink:exemyfile.m%將選項組合mcc-vWmain-Tlink:exemyfile.m下面是錯誤的用法:mcc-Wvmain-Tlink:exemyfile.m
%錯誤的用法2024/3/3(3)命令行中的沖突選項如果在命令行中使用的選項發(fā)生沖突,則編譯器優(yōu)先考慮最右側的選項。例如:在命令行中使用以下選項:mcc-m-Wnonemyfile.m由于-m選項相當于:-Wmain-Tlink:exe,因此兩個-W選項發(fā)生沖突,則編譯器只取最右邊的選項,即-Wnone選項。所以,以上命令與下列命令等價:mcc-Wnonemyfile.m2024/3/3三、輸入和輸出文件【例2】MATLAB編譯器以ex21_3_1.m作為輸入,產生獨立的應用程序ex21_3_1.exe。1、獨立的可執(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函數的主打包器C源文件。main函數取得由命令行傳遞的輸入參數,并把參數作為字符串傳遞給ex20_2函數。ex21_3_1_mcc_component_data.c包含MCR用來運行應用程序的數據的C源文件。這些數據包括路徑信息、密鑰和其它用于MCR的初始化信息。ex21_3_1.ctfCTF文檔。該文件包含一個用于組成應用程序的M文件的壓縮和加密的檔案。ex21_3_1.exe應用程序的主文件。該文件讀取和執(zhí)行保存在CTF文檔中的內容。在Windows系統(tǒng)中,該文件為ex21_3_1.exe最終產生的文件列表:2024/3/3【例】在本例中,MATLAB編譯器將M文件ex21_3_1.m編譯為C共享庫文件libmyshared.dll。用戶在配置好編譯器后,在命令窗口中輸入命令:mcc-Wlib:libmyshared-Tlink:libex21_3_1.m2、C共享庫文件編譯所產生的文件如下表所列:2024/3/3文件描述libmyshared.c數據庫打包器C源代碼文件,包含數據庫的輸出函數,代表與M函數(ex21_3_1.m)的C接口,以及數據庫的初始化代碼libmyshared.h數據庫打包器頭文件,改文件將被調用limyshared.dll的輸出函數的應用程序引用libmyshared_mcc_component_data.c包含MCR用來初始化和使用數據庫的數據(包括路徑信息、密鑰以及其它MCR初始化信息)的C源文件libmyshared.exportsmbuild用于連接數據庫的輸出文件libmyshared.ctfCTF文檔。該文件包含一個用于組成該共享庫的M文件的壓縮和加密的檔案,以及在運行時被M文件調用的其它文件以及數據libmyshared共享數據庫二進制文件。在Windows平臺上,改文件為libmyshared.dll,在Solaris平臺上,該文件為libmyshared.solibmyshared.exp連接器使用的輸出文件。連接器使用輸出文件來創(chuàng)建包含輸出的程序,通常是動態(tài)鏈接庫文件(.dll)。libmyshared.lib輸入數據庫。2024/3/3【例】在本例中,MATLAB編譯器將M文件ex21_3_1.m編譯為C++共享庫文件libmyshared.dll。在命令窗口中輸入命令:mcc-Wcpplib:libmyshared-Tlink:libex21_3_1.m3、C++共享庫文件編譯所產生的文件如下表所列:2024/3/3文件描述libmyshared.cpp數據庫打包器C++源代碼文件,包含數據庫的輸出函數,代表與M函數(ex21_3_1.m)的C++接口,以及數據庫的初始化代碼libmyshared.h數據庫打包器頭文件,改文件將被調用limyshared.dll的輸出函數的應用程序引用libmyshared_mcc_component_data.c包含MCR用來初始化和使用數據庫的數據(包括路徑信息、密鑰以及其它MCR初始化信息)的C++源文件libmyshared.exportsmbuild用于連接數據庫的輸出文件libmyshared.ctfCTF文檔。該文件包含一個用于組成該共享庫的M文件的壓縮和加密的檔案,以及在運行時被M文件調用的其它文件以及數據libmyshared共享數據庫二進制文件。在Windows平臺上,改文件為libmyshared.dll,在Solaris平臺上,該文件為libmyshared.solibmyshared.exp連接器使用的輸出文件。連接器使用輸出文件來創(chuàng)建包含輸出的程序,通常是動態(tài)鏈接庫文件(.dll)。libmyshared.lib輸入數據庫。2024/3/3第四節(jié)部署2024/3/31、確定需要打包的文件;2、使用部署工具(DeploymentTool);3、部署到目標計算機。本節(jié)主要包括以下內容:2024/3/3當用戶創(chuàng)建了數據庫、組件或應用程序后,需要將運行時所需的文件打包,以便部署到目標計算機中。那么,對不同的應用程序類型,到底哪些文件需要打包呢?以下分別介紹。一、確定需要打包的文件2024/3/31、獨立的應用程序軟件模塊描述MCRInstaller.exe(Windows)MCRInstaller是個自解壓可執(zhí)行程序,用來安裝運行應用程序所需的組件,該文件包含在MATLAB編譯器產品中MCRInstaller.bin(UNIX)MCRInstaller是個自解壓可執(zhí)行程序,用來安裝在UNIX機器上(Mac除外)運行應用程序所需的組件,該文件包含在MATLAB編譯器產品中MCRInstaller.dmg(Mac)MCRInstaller.dmg是個自解壓可執(zhí)行程序,用來安裝在Mac機器上運行應用程序所需的組件,該文件包含在MATLAB編譯器產品中application_name.ctfmbuild用于連接數據庫的輸出文件libmyshared.ctfCTF文檔。是與平臺相關的,必須與目標計算機平臺相一致application_name.exe(Windows)MATLAB編譯器產生的應用程序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,目標計算機必須有解壓軟件libmatrix.ctfCTF文檔。是與平臺相關的,必須與目標計算機平臺相一致libmatrix共享數據庫;擴展名依據平臺而定,在Windows平臺中為.dlllibmatrix.h共享數據庫的頭文件2024/3/33、.NET組件軟件模塊描述componentName.ctfCTF文檔componentName.xmlxml文檔文件componentName.pdb(如果選擇了調試模式)包含調試信息的數據庫文件componentName.dll組件集成文件MCRInstaller.exeMCR安裝文件2024/3/3軟件模塊描述mwcomutil.dll用于處理數組的應用程序,在數據轉換中提供類型定義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)建的內嵌Excel的文件6.Java組件用戶需創(chuàng)建包含componentName.jar文件的Java軟件包,該軟件包在componentName.ctf文件中包含指向M代碼的Java接口。2024/3/3部署工具是
MATLAB編譯器配備的圖形用戶界面(GUI)。用戶可以通過該工具提供的圖形用戶界面來使用
MATLAB命令行接口,以編譯并打包要部署在不同計算機上的組件。用戶可通過部署工具執(zhí)行以下操作:(1)指定主MATLAB函數。(2)添加無法通過依賴檢查自動識別的文件,如數據文件或圖像等。(3)保存編輯和打包首選項內容到項目文件(.prj)中。(4)對MATLAB應用程序進行編譯和打包。當用戶構建應用程序或組件時,MATLAB編譯器可以確定需要哪些MATLAB函數來支持用戶添加的文件并對代碼進行加密,然后將這些文件封裝為可執(zhí)行文件或組件。
二、使用部署工具2024/3/3在CommandWindow中輸入deploytool命令,將會出現如圖所示的對話框。用戶可以選擇新建一個部署項目,或者打開一個已有的部署項目。2024/3/31、新建項目選擇File->NewDeploymentProject菜單項或者使用鼠標點擊工具條上的New按鈕,將會彈出“NewDeploymentProject”對話框
2024/3/3分別選擇左側列表中的MATLAB編譯器產品,在右側列表中列出對應的編譯器產品所能創(chuàng)建的應用程序類型。MATLABCompiler產品2024/3/3MATLABBuilderEX產品2024/3/3
MATLABBuilderNE產品2024/3/3
MATLABBuilderJA產品2024/3/32、向項目中添加需要編譯的文件在新建項目中的“NewDeploymentProject”對話框中點擊OK按鈕,即可彈出如下圖所示的對話框,選擇Project菜單中的AddFile菜單項或點擊工具條中的“AddFile”按鈕,可彈出“Open”對話框,用戶可以定位所需的文件并把它們添加到項目中。2024/3/33、設置項目的相關信息選擇Project菜單的“Setting...”菜單項或點擊工具條上的“Setting...”按鈕,可打開“DeploymentProjectSettings”對話框,在對話框中可對項目的相關選項進行設置。2024/3/3(1)General選項卡的設置2024/3/3定義應用程序的名稱(Applicationname),如myplot。在OutputDirectories編輯區(qū)域,用戶可以設置編譯過程中使用的中間目錄(Intermediate)以及輸出目錄(Output)。默認情況下,deploytool會在圖21.4-2所示的Location目錄下創(chuàng)建兩個子目錄Project_Name\src和Project_Name\distrib,其中Project_Name為在圖21.4-2所示的對話框的Name中輸入的項目名稱。deploytool會把編譯過程中產生的中間文件存放到Project_Name\src中間目錄中,把最終編譯好并可用來部署的文件存放到Project_Name\distrib目錄中。
可以選擇是否產生詳細的輸出信息(GenerateVerboseOutput)??梢赃x擇是否CTF文檔嵌入到應用程序中(EmbedCTFarchiveintotheApplication);在MCR選項中,可以選擇在運行時是否加載Java虛擬機(JVM)等。在“CompilerOptionsFile”區(qū)域,可以定位所需要的選項文件。2024/3/3(2)“ToolboxesonPath”選項用戶可以設置在項目的創(chuàng)建過程中要搜索哪些工具箱。去掉不必要的工具箱可以減少編譯的時間,也會減小CTF的大小。2024/3/3(3)“C/C++Compiler”選項用戶可以修改C/C++編譯器設置。例如,為封裝的代碼產生調試信息,可以幫助用戶發(fā)現應用程序中的問題。2024/3/3(4)“Warning”選項用戶可以指定在編譯的過程中將在輸出窗口中產生哪些MATLAB編譯器信息。2024/3/3(5)“Packaging”選項用戶可以對程序打包所需要的信息和文件進行設置。用戶可以指定程序包的名稱(PackageName),將指定的MCR文件包含進程序包,同時,也可以指定項目中未包含、但為使MATLAB代碼可以正常運行所需要的外部文件。2024/3/34、對項目進行編譯和鏈接經過上述2、3兩個步驟,用戶可選擇DeploymentTool窗口上的Tools菜單中的Build菜單項,或者點擊工具條上的“Buildtheproject”按鈕,即可對項目進行編譯和連接。并在“DeployToolOutput”窗口中給出信息提示。2024/3/3在編譯和連接完成后,可以看到在項目所在的路徑下新產生了兩個子目錄,其中,distrib子目錄中包含文件即為用戶用來部署到目標計算機中的文件。2024/3/35、打開一個已有項目在利用mcc命令來將m文件編譯為獨立的應用程序時,可以看到,在目標文件夾中的文件中包含了后綴為.prj的文件,該文件即為相應的項目文件,可以使用deploytool部署工具來打開該文件。在deploytool中打開該文件后,用戶可以重新修改項目的設置,然后重新編譯該項目文件。6、將文件打包無論對于由mcc命令編譯產生的文件或者由deploytool工具編譯產生的文件(.prj),都可以使用deploytool工具打開,然后將需要的文件進行打包,以便部署到目標計算機中。用戶可以對需要打包的文件進行設置,可以選擇將MATLABCompilerRuntime(MCR)包含到軟件包中,也可以選擇將其它需要的文件包含到軟件包中。選擇Tools菜單中的Package菜單項,或者點擊工具條上的“Packagetheproject”按鈕,deploytool工具會自動將所需的文件進行打包處理,并且在輸出窗口中給出提示信息。2024/3/3打包信息提示:2024/3/31.Windows操作系統(tǒng)下的部署步驟:(1)打開包含運行時所需的軟件包。(2)在目標計算機上運行MCRInstaller一次。MCRInstaller將打開一個命令窗口,開始安裝。(3)如果部署的是Java應用程序,用戶必須在目標計算機上設置Java類所在的路徑。2.Unix操作系統(tǒng)下的部署步驟:(1)安裝MCR。找到MCRInstaller.zip文件,把它復制到目標計算機上的文件夾中。該文件夾將成為數據庫或應用程序的安裝文件夾。然后解壓MCRInstaller.zip文件,并安裝MCR。(2)正確地設置路徑環(huán)境變量。(3)如果部署的是Java應用程序,用戶必須在目標計算機上設置類的路徑。三、部署到目標計算機2024/3/3【例】將包含應用程序的軟件包部署到目標計算機中將例21.4-1生成的軟件包first_pro_pkg.exe復制到目標計算機中的某一個文件夾,然后按照如下步驟來部署。(1)雙擊first_pro_pkg.exe圖標,運行軟件包自解壓程序;2024/3/3(2)自動運行MCRInstaller.exe程序,安裝MCR。2024/3/32024/3/3(3)安裝完MCR后,即可在軟件包所在的文件夾中找到first_pro.exe文件,雙擊該文件,即可顯示DOS界面,解壓CTF文件,并運行應用程序。2024/3/3第五節(jié)典型案例介紹2024/3/3以下示例程序均以MATLABCompiler4.8(R2008a)為編譯工具。有關Compiler4.8的詳細信息,請參考MATLAB在線幫助文檔:/help/toolbox/compiler/rn/bri8syh-1.html說明:2024/3/31.案例背景在MATLAB中的M文件有兩種:腳本文件(MATLABscripts)和函數文件(MATLABfunctions)。兩種M文件都是以.m作為文件擴展名,但有很大的不同。
MATLAB提供了豐富的繪圖函數,可以實現強大的繪圖功能。利用句柄圖形(HandlesGraphics)的概念,用戶可以解決復雜的繪圖問題。本例主要講述利用MATLAB提供的命令來創(chuàng)建圖形窗口、坐標軸、按鈕控件,并且在坐標軸中繪制圖形,修改圖形的顏色,將代碼保存為MATLAB腳本文件。最后,利用MATLAB編譯器編譯為獨立的應用程序。一、將腳本M文件編譯為獨立的應用程序2024/3/32.編程要點利用5.4中介紹的直接編寫M文件來開發(fā)圖形用戶界面的方法來創(chuàng)建一個圖形窗口(figure),名稱為“changecurvecolor”;一個坐標軸(axes),在其中繪制正弦曲線;在其上創(chuàng)建四個下壓按鈕(pushbutton),其中三個用于改變曲線的顏色,一個用于關閉圖形窗口。將代碼保存為腳本文件。利用MATLAB自帶的LccC編譯器,調用mcc-m命令來編譯M文件。生成的應用程序在運行時帶有MS-DOS窗口。利用MicrosoftVisualC++6.0編譯器,調用mcc-e命令來編譯M文件。生成的應用程序在運行時不再帶有MS-DOS窗口。將生成的可執(zhí)行文件打包,以便部署到其它計算機中。2024/3/33.實現(1)創(chuàng)建圖形用戶窗口,代碼保存為curve_color.m文件;(2)設置MATLAB自帶的LccC編譯器,并編譯M文件。>>mbuild–setup>>mcc-mcurve_color.m-ddir1編譯完成后,在dir1中出現編譯生成的文件。2024/3/3雙擊curve_color.exe文件,即可運行應用程序,可以看到,程序運行時會出現MS-DOS窗口。2024/3/3(3)設置MicrosoftVisualC++6.0編譯器,并編譯M文件。>>mbuild–setup>>mcc-mcurve_color.m-ddir1編譯完成后,在dir1中出現編譯生成的文件。2024/3/3雙擊curve_color.exe文件,即可運行應用程序,可以看到,程序運行時不會出現MS-DOS窗口。(4)利用DeploymentTool將應用程序進行打包處理。2024/3/31.案例背景函數M文件也是用戶使用MATLAB編程時經常使用的文件形式之一。將MATLAB代碼封裝為函數M文件的形式,可以使得M文件能夠接受用戶的輸入信息,并將處理的結果返回給用戶。由其是對于大型的應用程序,可以將其劃分為一個個小的功能模塊,每一個功能模塊使用函數M文件來實現,最終集成為整個應用程序。使用函數M文件,用戶也可以很方便地擴展MATLAB的工具箱,等等。本例講述如何將函數M文件編譯為獨立的應用程序。將上述示例程序修改為函數M文件保存,并且調用MATLAB編譯器來創(chuàng)建獨立的應用程序。二、將函數M文件編譯為獨立的應用程序2024/3/32、編程要點要將curve_color.m應用程序修改為函數M文件,用戶需要執(zhí)行如下的操作:(2)代碼的開頭添加function關鍵字來定義函數的名稱。functioncurve_colorh0=figure('toolbar','none',...'units','normalized',...'position',[0.20.20.60.5],...'name','changecurecolor');…function為MATLAB的關鍵字,用來定義函數。curve_color為函數的名稱,函數名稱必須按照MATLAB中對變量名稱的約定來定義。函數也可以選擇帶輸入和輸出參數,例如:function[out1out2…]=funname(in1,in2,…)在這里選擇不帶輸入和輸出參數。2024/3/3(2)修改程序的代碼稱。由于定義各個按鈕的回調函數(Callback)為字符串形式,回調函數的代碼在基本(base)工作空間中執(zhí)行,其中的set語句引用的圖形對象的句柄必須保存在基本工作空間中。而將M文件定義為函數M文件后,圖形對象的句柄是保存在了函數(caller)工作空間中的,而這兩個工作空間中的變量是不能直接相互訪問的。所以,如果不修改代碼,則運行程序并點擊按鈕后會出現如下錯誤,提示句柄無效:???Errorusing==>setInvalidhandleobject.???ErrorwhileevaluatinguicontrolCallback要解決這個問題,有兩條途徑:將函數M文件中的變量定義為全局變量全局變量的作用于為整個MATLAB工作空間,全局變量一旦定義,MATLAB的任何函數都可以訪問和修改。要把變量定義為全局變量,只需調用global命令即可。global命令的調用格式如下:globalXYZ其中,X、Y、Z表示要定義的全局變量的名稱。可以同時定義多個全局變量,變量的個數沒有嚴格的限制。用戶在引用全局變量時,必須調用global命令來事前聲明全局變量,然后才能調用全局變量。清除全局變量時,需調用clear命令:clearglobalvar%其中,var為全局變量的名稱。
2024/3/3將函數M文件中的變量指派到基本工作空間中assignin將函數M文件中的變量的值指派給指定工作空間中的變量。函數的調用格式如下:assignin(ws,'var',val);其中,ws為標識工作空間的字符串,其值可以為“base”或“caller”;val為函數M文件中的局部變量,“var”為指定工作空間ws中的變量,若變量“var”在指定工作空間中不存在,則MATLAB自動創(chuàng)建該變量。修改程序的代碼,將圖形句柄k的值指派到基本工作空間中的變量k:assignin('base','k',k);修改后的M文件見curve_color2.m。函數M文件的編譯和部署的方法與腳本M文件相同,在此不贅述。2024/3/31.案例背景MATLAB提供了一個專門用于GUI程序設計的快速開發(fā)環(huán)境-GUIDE。利用GUIDE這一界面設計工具集,用戶不需要編寫任何代碼,即可以通過鼠標的簡單拖拽就能迅速地產生各種GUI控件,并可以根據要求方便地修改它們的外形、大小、顏色等屬性,從而幫助用戶方便地設計出各種符合要求的圖形用戶界面程序(GUI)。此外,比較復雜的MATLAB程序都是由多個M文件組成的。例如:一個應用程序有一個主函數M文件,主函數M文件又要調用其它的兩個M文件,而這兩個M文件又可能會調用其它的M文件,從而構成比較復雜的應用程序。對由多個M文件組成的應用程序的編譯也是用戶需要掌握的。三、對由GUIDE創(chuàng)建的GUI程序編譯為可獨立運行的程序2024/3/32、編程要點
MATLAB編譯器在編譯的過程中會有“依存關系檢查”這一步驟,MATLAB編譯器會對用戶用于編譯的M文件進行檢查,確定用戶提供的M文件需要調用哪些M文件以及這些M文件又要調用哪些M文件,等等。此外,MATLAB編譯器也分析用戶提供的M文件還要調用哪些MATLAB內置函數以及MATLAB對象。在依存關系檢查中創(chuàng)建的MATLAB文件(M文件和MEX文件)列表用于創(chuàng)建CTF文檔,CTF文檔包含應用程序正常執(zhí)行所需要的文件。這些文件被加密并壓縮到單個文件中以方便部署,目錄信息也包含在其中,以確保目錄中的文件能被正確地安裝到目標計算機。
因此,在對包含多個M文件的MATLAB程序進行編譯時,用戶只需在mcc命令行中包含主函數M文件即可,MATLAB編譯器會自動查找所需要的其它M文件,不需要用戶逐個進行編譯,用戶也不需要擔心會有哪些函數會被遺漏。
由GUIDE創(chuàng)建的應用程序包括M文件和FIG文件,用戶在利用MATLAB編譯器進行編譯時,其編譯方法與普通的M文件的編譯是一樣的。如果存在多個M文件,則只需對主M文件進行編譯。2024/3/31.案例背景C語言是目前世界上流行、使用最廣泛的面向過程的高級程序設計語言,許多應用軟件都是用C語言編寫的。C語言提供了基本的函數庫,程序員可以使用這些函數庫來完成復雜的運算,處理大量的數值數據。但有時,這些基本的函數往往不能滿足要求,需要程序員來編寫高級函數來完成所需的運算,如矩陣運算等。而MATLAB具有幾百個數學函數,可以完成數值分析、模擬與運算等強大的功能。因此,如果能在C開發(fā)環(huán)境中調用MATLAB強大的函數庫,則能為應用程序的開發(fā)提供很大的方便。
可以利用MATLAB編譯器將MATLAB函數打包成C或C++共享庫,然后在C或C++編程時調用這些共享庫中的函數,從而就像從MATLAB命令行中來調用這些函數一樣方便。四、將MATLAB程序編譯為C共享庫2024/3/32.編程要點(1)使用mcc命令創(chuàng)建C共享庫假設要將myfilename.m文件編譯為C共享庫,可以使用下面的命令:mcc-Bcsharedlib:libnamemyfilename.m-v其中,-Bcsharedlib選項是一個束選項,它擴展為-Wlib:<libname>-Tlink:lib-Wlib:<libname>選項讓MATLAB編譯器生成一個函數打包器,名稱為libname。-Tlink:lib指定目標輸出為共享庫。用戶還可以使用下面的命令來生成C共享庫myfilename.dll:mcc-lmyfilename.m-v
如果要將多個M文件編譯為C共享庫,可以使用如下的命令:mcc-lmyfilename1.mmyfilename2.mmyfilename3.m-v生成的C共享庫的名稱為myfilename1.dll。2024/3/3(2)編寫驅動程序調用MATLAB編譯器生成的共享庫的所有驅動程序一般都有類似的結構:聲明變量,處理和驗證輸入參數。調用mclInitializeApplication函數來初始化MATLAB庫。該函數用來設置全局MCR選項。在調用C共享庫時,每一個庫都有一個與之相對應的MCR示例。如果一個應用程序調用了兩個MATLAB編譯器產生的共享庫,則會創(chuàng)建兩個MCR實例。在用戶創(chuàng)建第一個MCR實例前,必須調用mclInitializeApplication函數來設置MCR的選項,該函數將MCR選項應用于所有MCR實例。每個庫調用一次<libname>Initialize函數,來創(chuàng)建庫所需要的MCR實例。該函數執(zhí)行庫的初始化工作,例如:釋放CTF文檔,啟動MCR實例等。調用每個庫的輸出函數,使用C-MexAPI函數來處理函數的輸入和輸出參數。2024/3/3當應用程序不再需要調用指定的庫函數時,調用每個庫的<libname>Terminate函數,來銷毀相關的MCR實例,釋放與MCR相關的資源。一旦一個庫被終止,則該庫的輸出函數在應用程序中就不能被再調用。當應用程序不再需要調用任何庫時,調用mclTerminateApplication函數。該函數釋放MCR實例所使用的應用程序級別的資源。該函數被調用后,應用程序就不能再使用任何庫了。清除變量,關閉文件,等等,并退出應用程序。3.編寫驅動程序要編譯驅動程序,使
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四事業(yè)單位正式合同編制員工錄用規(guī)范3篇
- 針對二零二五年度酒店客房服務員晉升的聘用合同范本3篇
- 二零二四年鄉(xiāng)村旅游項目樹木栽種與生態(tài)旅游合同3篇
- 一站式2024版離婚合同書獲取與咨詢平臺一
- 二零二五年度新能源儲能技術轉移及商業(yè)秘密保護合同3篇
- 二零二五年度車位買賣及管理合同范本3篇
- 2025年新能源產品銷售合同模板2篇
- 2025年度旅游大巴租賃與景區(qū)門票打包銷售合同范本3篇
- 2025年度購房貸款保證合同
- 二零二五年度環(huán)保企業(yè)試用期員工勞動合同
- 品質經理工作總結
- 供電搶修述職報告
- 集成電路設計工藝節(jié)點演進趨勢
- 新型電力系統(tǒng)簡介演示
- 特種設備行業(yè)團隊建設工作方案
- 眼內炎患者護理查房課件
- 肯德基經營策略分析報告總結
- 買賣合同簽訂和履行風險控制
- 中央空調現場施工技術總結(附圖)
- 水質-濁度的測定原始記錄
- 數字美的智慧工業(yè)白皮書-2023.09
評論
0/150
提交評論