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。