如何在 VC++60 环境中编译与调试 mex 程序.docx

上传人:b****5 文档编号:11838171 上传时间:2023-04-05 格式:DOCX 页数:10 大小:300.80KB
下载 相关 举报
如何在 VC++60 环境中编译与调试 mex 程序.docx_第1页
第1页 / 共10页
如何在 VC++60 环境中编译与调试 mex 程序.docx_第2页
第2页 / 共10页
如何在 VC++60 环境中编译与调试 mex 程序.docx_第3页
第3页 / 共10页
如何在 VC++60 环境中编译与调试 mex 程序.docx_第4页
第4页 / 共10页
如何在 VC++60 环境中编译与调试 mex 程序.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

如何在 VC++60 环境中编译与调试 mex 程序.docx

《如何在 VC++60 环境中编译与调试 mex 程序.docx》由会员分享,可在线阅读,更多相关《如何在 VC++60 环境中编译与调试 mex 程序.docx(10页珍藏版)》请在冰豆网上搜索。

如何在 VC++60 环境中编译与调试 mex 程序.docx

如何在VC++60环境中编译与调试mex程序

如何在VC++6.0环境中编译与调试mex程序

注:

1.vc调试mex,直接从第三步开始即可。

2.完成后,直接编译(compile)会出错,先用build(组建),就没有错误了。

若还有错,尝试:

(1).把debug文件夹清空后再试

(2).加如def文件后面的“mexFunction”—变成—“;mexFunction”后再build。

Build通过后,去掉分号“;“。

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、建立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模板 > 卡通动漫

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1