A. 在MATLAB中用C語言編寫S函數時,怎麼生成動態鏈接庫(DLL)文件
在編寫好S函數的實現代碼*.c文件後,還需要在Matlab的命令輸出窗口中進行命令行輸入,完成對源代碼的編譯,這樣才能被S函數模塊所調用。在命令窗口中輸入命令:
「mex
-g
RandomTimeDelay.c」
M文件S-函數在MATLAB環境下可以通過解釋器直接執行,而C文件或其它語言編寫的C-函數,則需要先編譯成可以在MATLAB內運行的二進制代碼:動態連接庫或靜態連接庫,然後才可以使用,這些經過編譯的二進制文件就稱作MEX文件。用MEX命令來對*.c文件進行編譯,然後會在相應的目錄下生成對應的*.mexw32文件。然後就可以在simulink模塊中引用這個s函數了。
B. MATLAB 如何配置編譯器
在MATLAB的Command Window下輸入命令 mbuild –setup,並根據MATLAB的提示選擇合適的編譯器,使用Microsoft Visual C++6.0,進行對C++連接環境的設置。
過程如下:
>> mbuild -setup
按照提示選擇操作,選擇編譯器進行安裝
然後,在MATLAB的Command Window下輸入命令 mex –setup,進行對編譯環境的設置。過程如下:
>> mex -setup
按照提示選擇操作,選擇你所需要的編譯器就可以了。
C. MATLAB mex 找不到編譯器怎麼辦
①選y後,MATLAB會列出當前機器上已經安裝的、且與當前MATLAB版本兼容的所有C編譯器,一般而言,MATLAB都會自帶一個LCC編譯器,然而LCC目前僅支持32位的MATLAB,所以你的機器上沒有。
②選n後,MATLAB會列出所有與當前MATLAB版本兼容的C編譯器類型(不管你是否已經安裝,用於幫助用戶選擇合適的C編譯器),你機器上已經安裝的2個編譯器,VC6.0:MATLAB從R2010b之後不再支持,所以選項里看不到;而SDK7.1選n時可以看到([11]),但選y時沒有跳出,是因為MATLAB沒有正確定位SDK。
③解決方法:
方法一:如果以預設選項安裝了SDK7.1(不改變默認安裝路徑),可以嘗試輸入n後,選擇 [14] (注意:是14,不是11!),強制定位該編譯器(網上有人用這種方法成功了:http://mlinking.blog.163.com/blog/static/185801922201331464626365/)
方法二:重新安裝MATLAB,安裝時選擇32位進行安裝,則自帶LCC編譯器。
方法三:選擇適配的VS版本,下載安裝後,重新配置MEX命令。
D. 請教關於利用Matlab中「mex」命令編譯C程序的問題
1.准備好C語言程序,清楚C語言的入口函數
2.編寫mexfunction函數。mexfunction函數為C語言與MATLAB語言的介面函數。調用實例在mylinedetect.c文件中.在MATLAB中調用mex指令編譯相關文件,將C語言編譯為MEX文件。
3.編譯完成後,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用於MATLAB與C語言介面函數.
4.編譯完成之後,編寫MATLAB函數,調用MEX文件。以MEX文件的形式調用編譯完成的C語言函數[o1,o2]=mylinedetect(double(X).');......
5.輸出結果,上述linedetect函數完成圖像中直線檢測功能,帶入MATLAB中調用後形成結果。
E. MATLAB 錯誤使用 mex
要解決相關的mex命令找不到編譯器,首先就需要了解相關命令調用的配置文件的路徑位於:<MatlabRoot>/bin/win64/mexopts,裡面有很多和和編譯器以及SDK相關的環境配置文件,如圖所示。
1、matlab版本問題
標明了不同類型版本的編譯器配置文件,如果編譯器版本的配置信息不在這個文件夾裡面自然會提示找不到到文件夾。這類問題網上有很多解決方法,提供了很多相應版本的配置文件,只要將其拷到mexopts文件夾下,就解決了。
2、配置文件裡面的路徑和電腦的實際路徑不一致
解決方法:要仔細核對 msvc2013.xml和msvcpp2013.xml這兩個配置文件的信息。
(5)mex命令擴展閱讀:
通過使用MEX文件,MEX文件使得調用C函數和調用Matlab的內置函數一樣方便。MEX文件是由原C代碼加上MEX文件專用的介面函數後編譯而成的。
MEX文件實現了一種介面,它把在Matlab中調用函數時輸入的自變數通過特定的介面調入了C函數,得出的結果再通過該介面調回Matlab。該特定介面的操作,包含在mexFunction這個函數中,由使用者具體設定。