vc编译 matlab,VC++中编译MEX程序

一般情况下,我们都是在MATLAB命令行或DOS命令行下编译MEX程序。

所用的命令就是:mex filename.c 这有很多不方便的地方:

a. 虽然mex也可以编译C++的mex程序,但是它的主框架仍是C的 a.

当程序有多个模块时,需要多次使用mex命令,操作很麻烦

b. 不能利用VC特有的ClassWizard自动创建和维护类

c. 不能用MFC类库编写应用程序

d. 不能方便地进行类似VC的项目管理

这样一个命令行的编程环境可能会大大束缚你的想象力...

其实解决问题的方法很简单,下面以VC6环境为例详细解说如何在IDE中编译MEX程序。

2. 步骤

(1)准备工作 (这里假设MATLAB的路径为:C:\MATLAB)

a. 由matlab.def创建库文件matlab.lib

进入c:\matlab\extern\include目录,用lib命令生成matlib.lib

C:\>cd \matlab\extern\include

C:\MATLAB\extern\include>lib

/def:matlab.def /out:matlab.lib

Microsoft (R) Library Manager Version

6.00.8447

Copyright (C) Microsoft Corp 1992-1998. All

rights reserved.

LIB : warning LNK4068: /MACHINE not

specified; defaulting to IX86

Creating library matlab.lib and object

matlab.exp

C:\MATLAB\extern\include>

警告信息不用理它。

b. 修改mex.h

该文件也在C:\MATLAB\extern\include目录

找到这一行:void mexFunction(

替换为 : __declspec( dllexport ) void mexFunction(

另保存为 :mex_vc.h

(2)启动VC,创建MFC AppWizard(dll)程序框架

(3)设置系统选项

a. 设定头文件和库文件路径

菜单Tools->Options->Directories

Include files:添加c:\matlab\extern\include

Library files:添加c:\matlab\extern\include

b. 设置编译连接选项

菜单Project->Settings

C/C++->Preprocessor definitions: 添加MATLAB_MEX_FILE

Link->Object/Library modules: 添加matlab.lib

注1. 其它优化、调试以及头文件、库文件等选项看情况调整

注2. Release版在General->Microsoft Foundation Classes选项中,

必须设置为Use MFC in a Static Library. 原因不明 (4)编写DLL主程序

a. 文件名要用.cpp为扩展名,头两行必须是:

#include "stdafx.h"

#include "mex_vc.h"

b. 编写mexFunction函数,用如下格式声明:

void mexFunction(

int nlhs, mxArray *plhs[],

int nrhs, const mxArray *prhs[])

{

...

}

(5) 象普通VC的DLL程序一样继续编写其它部分程序,加入其它模块

(6) 调试错误,用F7编译,生成DLL。我的例子:

--------------------Configuration: MatWave - Win32

Release--------------------

Compiling resources...

Compiling...

StdAfx.cpp

Compiling...

MatWave.cpp

sample.cpp

mex.cpp

Generating Code...

Linking...

Creating library Release/MatWave.lib and object

Release/MatWave.exp

LINK : warning LNK4089: all references to "SHELL32.dll"

discarded by /OPT:REF

LINK : warning LNK4089: all references to "comdlg32.dll"

discarded by /OPT:REF

MatWave.dll - 0 error(s), 2 warning(s)

大功告成,有两个警告,不理它。 拿到MATLAB里面试试吧,不过要有非法操作和异常退出的心理准备哦.

补充:vc中编译,单步调试mex程序

最好先具备如下基础:

1.调试过dll程序;

2.

VC中编译过mex程序;

3 . 任意一种开发工具中调试程序的能力;

在VC中编译mex程序的配置步骤(如果已熟悉,跳过这段):

1. mex

-setup, mbuild -setup 选择vc编译器(这未必需要,matlab中编译肯定会有此步的);

2.

创建DLL工程,在Project页面可以选择 MFC AppWizard(DLL);

3.

选择静态链接MFC的DLL;

4.

设定输出函数,在.def文件指定DLL的输出函数,mex程序为 mexFunction。类如如下:

;

createFontBitmap.def : Declares the module parameters for the

DLL.

LIBRARY "createFontBitmap"

DESCRIPTION 'createFontBitmap

Windows Dynamic Link Library'

EXPORTS

; Explicit exports can go

here

mexFunction

5. 环境设置

可以在头文件中include,也可以在vc环境中,我习惯于在vc环境中设置:

A.Tools--->Options--->Directories---->Show

Directories for---->Include 然后选择

$MATLABROOT\EXTERN\INCLUDE;

B.

Tools--->Options--->Directories---->Show Directories

for---->Library ,

$MATLABROOT\LIB\WIN32\MICROSOFT\MSVC60或者是$MATLABROOT\LIB\WIN32\MICROSOFT\MSVC70,以及$MATLABROOT\EXTERN\LIB

C. Project-->Setting, 在Link页面的Object/library

modules填入 libmx.lib libmex.lib

等库,具体需要哪些库根据你的程序而定,目前这个就是上面这几个库。

6. 写代码;

7. 调试:

A.

在debug模型下进行;

B.

Project--->Setting--->Executable for debug session 填入

$MATLABROOT\bin\win32\MATLAB.exe (

其实自己运行工程(点那个go按钮(F5))也会弹出对话框让你选择,然后浏览到matlab.exe即可;

C. 加断点;

D.

Go(F5),会提示说matlab不可调试,你不用管它;

E.

在新启动的MATLAB进程命令窗中中调用mex函数

余下的与任何开发平台的任何调试步骤类似

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值