1. MATLAB 環境配置:html
>> mbuild -setup
(注:如果第一次mbuild -setup,選n,再在給出的的選項中選擇2010 compiler,要注意安裝路徑是否相符)web
>> mex – setupredis
以相似的方法配置編譯器。Matlab 的配置完成.編程
2.轉化BoostImage.m文件api
mcc -W cpplib:BoostImage -T link:lib BoostImage -d F:\zhangying\xieyulin\MatlabToC\app
注:在此的m文件function最好對應end,不然容易出現 Error using mcc的錯誤。(但我碰到有個m文件仍不能轉化成功,不知什麼緣由)ide
其中,mcc是Matlab提供的編譯命令,對於這一點,Matlab的幫助說明以下:
-W lib:string link:lib其中-W是控制編譯以後的封裝格式,cpplib,是指編譯成C++的lib,cpplib冒號後面是指編譯的庫的名字,函數
-T表示目標,link:lib表示要鏈接到一個庫文件的目標,目標的名字是後面的BoostImage,即你寫的m函數的名字。
運行完以後,你的目錄下面,將會出現如下一些文件:測試
BoostImage.cpp
BoostImage.exp
BoostImage.dll
BoostImage.exports
BoostImage.h
BoostImage.lib
mccExcludedFiles.log
readme.txtui
具體每個文件的意思,請查幫助,這裏只說其中頗有用的幾個:
BoostImage.dll是編譯好的動態庫,BoostImage這個函數封裝在裏面,BoostImage.h是對應的頭文件,在C裏面調用這個函數的時候,須要include這個頭文件在這個頭文件的最後,你能夠看到下面的內容:
extern LIB_BoostImage_CPP_API void MW_CALL_CONV BoostImage(int nargout, mwArray& output_im, const mwArray& input_im, const mwArray& Mboost);
這就是BoostImage的C函數的聲明。nargout表示輸出變量的個數,a,b,c就是對應了m函數的幾個變量。
注意,a,b,c三個變量的類型是mwArray,這是Matlab提供的一個特殊的變量類型(在7.0的版本,編譯以後,變量類型是mxArray)。mwArray是一個類,具體能夠查幫助。
2.系統環境設置
個人電腦->屬性->高級->環境變量->用戶變量->PATH中添加路徑:D:\Program Files\MATLAB\R2011b\bin\win32,重啓生效。
3.VS2010環境配置
新建一個win32 控制檯應用程序,命名爲MatlabTest.
右鍵MatlabTest解決方案->properties->VC++ Derections
(1)在「Executable Directions」項目欄,添加:D:\Program Files\MATLAB\R2011b\bin\win32(注意:當前的Mathlab安裝在D:\Program Files下面)
(2)在「include Directions」項目欄,添加:D:\Program Files\MATLAB\R2011b\extern\include
(3)在「Library Directions」項目欄,添加:D:\Program Files\MATLAB\R2011b\extern\lib\win32\microsoft
上述環境只須要配置一次。
另參考:
在此暫時先測試了VS2010調用matlab現有函數的功能:
若出現以下問題:
error C2371: 'char16_t' : redefinition; different basic types
在混合編程中,也許會出現以下錯誤:
—————————————————————————————————————————————————
C:Microsoft Visual Studio 10.0VCINCLUDEyvals.h(576) : error C2371: 'char16_t' : redefinition; different basic types
C:Matlabr2010aexternincludematrix.h(330) : see declaration of 'char16_t'
—————————————————————————————————————————————————
緣由是VS2010中的yvals.h添加了char16_t的定義,而Matlab的matrix.h也包含對char16_t的定義,因此同時包含這兩個頭文件的話,會致使重複定義char16_t的錯誤。
解決方案:
參考:http://maciejgryka.com/bits/2011/09/char16_t-conflict-while-mexing-with-vs2010/
徹底沒有必要修改這兩個頭文件(以防修改以後,會在未來致使一些問題),只須要在包含matrix.h以前包含yvals.h便可。例如:
#include <yvals.h>
#if (_MSC_VER >= 1600)
#define __STDC_UTF_16__
#endif
#include "mex.h"
注:mex.h 包含matrix.h。這就要求咱們必須知道所包含的頭文件是否包含matrix.h。