搜档网
当前位置:搜档网 › matlab与C++混合编程步骤详解

matlab与C++混合编程步骤详解

matlab与C++混合编程步骤详解
matlab与C++混合编程步骤详解

MATLAB文件变为C/C++文件混合编程

1 使用MATLAB 自带的MATLAB COMPILER

MATLAB Compiler 是MATLAB自带的一个编译器,它能将m文件转化成 C、C++或p等各种类型的源代码,并根据需要生成可执行文件、lib文件(库文件)、dll文件或S函数文件等。Matlab所使用的编译器包括了MATLAB 的C\C++数

学库函数以及图形库。

必须保证编译器的正确配置,因为编译器使用了C\C++库函数,所以在使用前需要使用mex -setup 和 mbuild -setup两个命令对编译器进行配置。步骤

如下:

1. 设置Matlab的编译器,使用外部的VC或者gcc等编译器。

2. 编译m文件成dll

3. 设置VC等的继承环境,设置C需要用到的静态库和动态库

4. 编写C调用dll

1.1设置MATLAB编译器

首先要安装Matlab 编译器,一般来说,在安装了Matlab后编译器就己经

安装了,所在就只需要对Matlab编译器进行设置。

1.1.1 编译环境设置

首先设置系统的环境变量,点击“我的电脑”属性-→系统特性--→高级-→环境变量-→添加系统变量Matlab值为Matlab的安装路径:G:\matlab7.0\bin\win32,重启电脑即可。

1.1.2 MATLAB7.0 编译器设置

(a) 为编译后产生的MEX文件进行预配置

在Matlab 的命令窗口(Command Window) 键入“mex -setup ”命令后,按回车键,安装Matlab 编译器;

(b) 为产生独立外部应用程序进行预配置

对Matlab编译器mbuild应用程序进行设置,运行Matlab ,在Matlab 的命令窗口(Command Window) 键入“mbuild -setup ”命令后,按回车键,安装Matlab 编译器;

1.2 将MATLAB函数转成DLL函数

在Matlab的Command Window /下输入命令:

命令 1 :mcc -W lib:dlltest -T link:lib huatu_test.m

命令 2 :mcc -W cpplib: dlltest -T link:lib huatu_test.m

命令1生成的是C,命令2生产的是C++。

其中,mcc是matlab提供的编译命令(可以理解为gcc),对于这一点,matlab 的帮助说明如下:

-W lib:string link:lib

其中-W是控制编译之后的封装格式,cpplib,是指编译成C++的lib,cpplib冒号后面是指编译的库的名字,-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字是后面的你写的m函数的名字。

生成的文件将会保存在当前目录下,默认的当前目录为:MATLAB根目录

\work,找到dlltest.h 、dlltest.lib和dlltest.dll文件,这三个文件是我们需要的。

1.3 文件载入VC中

找到band.h 、band.lib和band.dll文件,这三个文件是我们需要的。

Band.Cpp不要??

放到VC工程的目录下,通过解决方案资源管理器中添加现有项,将band.h 、band.lib和band.dll添加进去。此时编译会报错,说无法打开包括文件:“mclmcrrt.h”

这个文件在哪儿呢?既然是从matlab转换成C++的,那么说明这个头文件在matlab中是提供了的。经过寻找,发现这个文件在【D:\Program Files\MATLAB\R2011b\extern\include】下。在解决方案资源管理器中,选择项目的属性->C/C++->常规->附加包含目录中添加【D:\Program Files\MATLAB\R2011b\extern\include】这个地址,再编译就可以通过了。

具体应该是调用头文件中的

extern LIB_band_CPP_API void MW_CALL_CONV Band(int nargout, mwArray& B, mwArray& A, mwArray& N_order, const mwArray& Parameter);函数

vc引入lib库(转)

1、问题阐述

MFC编写程序,都要用到动态链接库,MFC相关的动态库有MFCD42和MFC42等,MFC框架程序已经自动加载,那么如何引入第三方的动态链接库到工程中呢?

2、设置技巧

静态链接库是要先把程序中所需要使用的函数编译成机器码,保存在*.lib 文件中。编译器会去*.lib中找出所需要的函数,并把这些函数的机器码复制一份,放在可执行文件中。将lib库引入工程,有下面3种方法。

第一种方法,LIB文件直接加入到工程文件列表中。

在VC中打开“File View”一页,选中工程名,单击鼠标右键,然后在弹出的快捷菜单中选择【Add Files to Project】命令,在弹出的文件对话框中选中要加入dll的lib文件即可。

第二种方法,设置工程的【PROJECT】菜单【SETTINGS】来加载DLL 的LIB文件

打开工程的【Project】菜单的【Settings】,选中【Link】,然后在“Object/library modules”下的文本框中输入dll的lib文件。

第三种方法,预编译指令导入

加入预编译指令#pragma comment(lib,”*.lib”),这种方法优点是可以利用条件预编译指令链接不同版本的lib文件。因为,在Debug方式下,产生的lib文件是Debug版本,如Regd.lib;在Release方式下,产生的lib文件时Release版本,如Regr.lib。当应用程序对dll的 lib文件加载后,还需要把dll对应的头文件(*.h)包含到其中,在这个头文件中给出了dll中定义的函数原型,然后根据对函数原型的声明,就可以使用dll中的函数,代码参考如下:

引入库test.lib,在程序的根目录下包含文件test.dll。

#pragma commenct(lib,”test.lib”)

#include “test.h”

按照上面的方法在工程中引入库test.lib后,就可以调用test库中的函数了。

相关主题