如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx

上传人:b****2 文档编号:3796741 上传时间:2023-05-02 格式:DOCX 页数:14 大小:300.77KB
下载 相关 举报
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第1页
第1页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第2页
第2页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第3页
第3页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第4页
第4页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第5页
第5页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第6页
第6页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第7页
第7页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第8页
第8页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第9页
第9页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第10页
第10页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第11页
第11页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第12页
第12页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第13页
第13页 / 共14页
如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx

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

如何在 VC++60 环境中编译与调试 mex 程序Word文档格式.docx

函数文件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)命令窗口出现如下提示:

y

Selectacompiler:

[1]DigitalVisualFortranversion6.0inC:

\ProgramFiles\MicrosoftVisualStudio

[2]LccCversion2.4inC:

\MATLAB6P5\sys\lcc

[3]MicrosoftVisualC/C++version6.0inC:

[0]None

此时键入”3”,按回车;

选择MicrosoftVisualC++6.0的编译器

(d)命令窗口出现如下提示:

Pleaseverifyyourchoices:

Compiler:

MicrosoftVisualC/C++6.0

Location:

C:

Arethesecorrect?

([y]/n):

确认选择MicrosoftVisualC++6.0的编译器

(3)mbuild命令设置

(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mbuild-setup”命令后,按回车键,安装Matlab编译器;

PleasechooseyourcompilerforbuildingstandaloneMATLABapplications:

Wouldyoulikembuildtolocateinstalledcompilers[y]/n?

[1]LccCversion2.4inC:

[2]MicrosoftVisualC/C++version6.0inC:

此时键入”2”,按回车;

(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里面加入:

\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函数代码如下:

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<

m1*n1;

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测试成功!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2