如何在 VC++60 环境中编译与调试 mex 程序.docx
- 文档编号:16921121
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:14
- 大小:300.77KB
如何在 VC++60 环境中编译与调试 mex 程序.docx
《如何在 VC++60 环境中编译与调试 mex 程序.docx》由会员分享,可在线阅读,更多相关《如何在 VC++60 环境中编译与调试 mex 程序.docx(14页珍藏版)》请在冰豆网上搜索。
如何在VC++60环境中编译与调试mex程序
中文版火狐浏览器
远离木马和流氓软件
点下面图标下载
如何在VC++6.0环境中编译与调试mex程序
作者:
陆振波
单位:
海军工程大学
电子邮件:
luzhenbo@
个人主页:
1、编写Matlab函数
函数文件sum_prod.m,内容如下:
function[sum,prod]=sum_prod(p1,p2)
sum=p1+p2;%p1与p2的和
prod=p1.*p2;%p1与p2的点乘
该函数完成的是矩阵的求和与点乘的功能,下面将介绍把该代码转换成C++环境可用的代码的方法。
2、Matlab6.5编译器设置
(1)在同一台电脑上安装Matlab6.5和VisualC++6.0;
(2)mex命令设置
(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mex-setup”命令后,按回车键,安装Matlab编译器;
(b)命令窗口出现如下提示:
Pleasechooseyourcompilerforbuildingexternalinterface(MEX)files:
Wouldyoulikemextolocateinstalledcompilers[y]/n?
此时键入”y”,按回车;
(c)命令窗口出现如下提示:
Pleasechooseyourcompilerforbuildingexternalinterface(MEX)files:
Wouldyoulikemextolocateinstalledcompilers[y]/n?
y
Selectacompiler:
[1]DigitalVisualFortranversion6.0inC:
\ProgramFiles\MicrosoftVisualStudio
[2]LccCversion2.4inC:
\MATLAB6P5\sys\lcc
[3]MicrosoftVisualC/C++version6.0inC:
\ProgramFiles\MicrosoftVisualStudio
[0]None
此时键入”3”,按回车;选择MicrosoftVisualC++6.0的编译器
(d)命令窗口出现如下提示:
Pleaseverifyyourchoices:
Compiler:
MicrosoftVisualC/C++6.0
Location:
C:
\ProgramFiles\MicrosoftVisualStudio
Arethesecorrect?
([y]/n):
此时键入”y”,按回车;确认选择MicrosoftVisualC++6.0的编译器
(3)mbuild命令设置
(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mbuild-setup”命令后,按回车键,安装Matlab编译器;
(b)命令窗口出现如下提示:
PleasechooseyourcompilerforbuildingstandaloneMATLABapplications:
Wouldyoulikembuildtolocateinstalledcompilers[y]/n?
此时键入”y”,按回车;
(c)命令窗口出现如下提示:
[1]LccCversion2.4inC:
\MATLAB6P5\sys\lcc
[2]MicrosoftVisualC/C++version6.0inC:
\ProgramFiles\MicrosoftVisualStudio
[0]None
此时键入”2”,按回车;选择MicrosoftVisualC++6.0的编译器
(d)命令窗口出现如下提示:
Pleaseverifyyourchoices:
Compiler:
MicrosoftVisualC/C++6.0
Location:
C:
\ProgramFiles\MicrosoftVisualStudio
Arethesecorrect?
([y]/n):
此时键入”y”,按回车;确认选择MicrosoftVisualC++6.0的编译器
(4)在Matlab的命令窗口(CommandWindow)键入“cd(prefdir);mccsavepathprefdir;”启动MATLABadd-in工具条
3、建立MFC动态链接工程
(1)建立一个名为sum_prod的MFC动态链接工程,如下图所示
(2)单击OK按钮,出现如下对话框,选择使用静态链接MFC的DLL,如下图如示,其它采用默认设置。
(3)在Sample目录下会生成sum_prod.cpp和sum_prod.def这两个文件。
4、VC++6.0环境及工程设置
在上面的VC工程中,进行以下设置
(1)VC++6.0环境设置
单击菜单Tools,出现如下菜单
单击Options…菜单项,出现Options对话框,选择Directories标签,在includefiles里面加入:
C:
\MATLAB6P5\EXTERN\INCLUDE
如下图所示
在Libraryfiles里面加入:
C:
\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
如下图所示
(2)VC++6.0工程设置
单击菜单Project,出现如下菜单
单击Setting…菜单项,出现ProjectSetting对话框,选择Link标签,在Object/librarymodules:
下面的文本框内容的后面加入libmx.liblibmex.liblibmatlbmx.liblibmat.lib,如下图所示
设置完成。
5、添加mexFunction函数代码
(1)打开sum_prod.def文件,在“EXPORTS”后面加入mexFunction一行,声明mexFunction函数为导出函数,下面是编辑后的sum_prod.def文件内容
(2)打开sum_prod.cpp文件,在该文件尾部添加mexFunction函数代码。
也可以将mexFunction函数代码用另外一个cpp文件保存,在每个文件的开始应加上这一行
#include"stdafx.h"
(3)与第1步Maltab函数相对应的mexFunction函数代码如下:
#include"mex.h"//mx,mex函数头文件
//定义输入参数
#defineP1prhs[0]
#defineP2prhs[1]
//定义输出参数
#defineSUMplhs[0]
#definePRODplhs[1]
//定义C运算函数
voidSUM_PROD_RUN(double*sum,
double*prod,
double*p1,
double*p2,
intm1,
intn1)
{
//C源程序代码
inti;
for(i=0;i { sum[i]=p1[i]+p2[i]; prod[i]=p1[i]*p2[i]; } } void mexFunction(intnlhs,mxArray*plhs[],//输出参数个数,及输出参数数组 intnrhs,constmxArray*prhs[])//输入参数个数,及输入参数数组 { intm1,n1,m2,n2; double*p1,*p2,*sum,*prod; //取得输出矩阵的行列数 m1=mxGetM(P1); n1=mxGetN(P1); m2=mxGetM(P2); n2=mxGetN(P2); //输入矩阵的行列数必须相等 if(m1! =m2||n1! =n2) mexErrMsgTxt("Thesizeofinputmatrixmustbeequal! \n"); //为输出变量分配内存空间 SUM=mxCreateDoubleMatrix(m1,n1,mxREAL); PROD=mxCreateDoubleMatrix(m1,n1,mxREAL); //取得输入参数指针 p1=mxGetPr(P1); p2=mxGetPr(P2); //取得输出参数指针 sum=mxGetPr(SUM); prod=mxGetPr(PROD); //调用C运算函数 SUM_PROD_RUN(sum,prod,p1,p2,m1,n1); return; } (4)编译链接程序后,可以在Debug目录得到sum_prod.dll,该DLL就是Matlab环境中可直接调用的C语言mex函数 6、mexFunction函数调试 (1)在VC++6.0中以Debug方式建立以上sum_prod工程 (2)单击菜单Project,出现如下菜单 单击Setting…菜单项,出现ProjectSetting对话框,选择Debug标签,在Executablefordebugsession: 下面的文本框内容的后面加入matlab.exe的完整路径名,如下图所示 接OK按钮。 (3)在mexFunction源程序中合适的设置断点,然后按F5键进入调试过程。 (4)进入调试过程后,就会启动一个新的Matlab程序,这个Matlab程序的当前目录为该工程所在的位置,为了运行sum_prod.dll,需要将当前目录设置为Debug目录。 (5)在Matlab命令窗口调用sum_prod.dll,程序就会停在VC++6.0环境里的程序断点处。 此时可以在Context窗口中看到最近处理的变量数值,并可以随意添加Watch。 这样就可以像调试通常的C程序一样对mex程序进行调试,如下图所示。 7、mexFunction函数测试 (1)运行Matlab6.5,将sum_prod.dll复制到Matlab当前目录 (2)在Matlab6.5命令窗口输入以下代码 “p1=[12;34];p2=[56;78];[sum,prod]=sum_prod(p1,p2)” 按回车键,得到 sum= 68 1012 prod= 512 2132 表明sum_prod.dll测试成功!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何在 VC+60 环境中编译与调试 mex 程序 如何 VC 60 环境 编译 调试