以前做过matlab7与c++的混合编程:将m函数編译成dll给C++调用从而加快开发的进度。但是今天在matlab2008b下面又做了一遍发现matlab又改了很多东西,诸如增加了面向对象的的扩展mwArray于是做笔记如丅。
matlab提供了丰富的程序接口除了matlab最初的版本是用fortran写的之外,后来的版本都是用C写的因此matlab很容易和C/C++联合起来使用。
matlab有着丰富的库函数將这些库函数直接编译成dll(windows下是dll,linux下是类似于dll的另外一个东西)给C调用,可以加快工程进度
1. 设置matlab的编译器,使用外部的VC或者gcc等编译器
3. 设置VC等的继承环境,设置C需要用到的静态库和动态库
下面以一个很简单的加法函数为例说明在VC6和matlab2008b下,怎么做混合编程
(二) 设置matlab编译器
2. 选择编译器这里选择2,即VC6
首先写出matlab函数,一个很简单的加法函数如下:
然后,进行编译命令如下:
其中,mcc是matlab提供的编译命令(鈳以理解为gcc)对于这一点,matlab的帮助说明如下:
其中-W是控制编译之后的封装格式cpplib,是指编译成C++的libcpplib冒号后面是指编译的库的名字,-T表示目标link:lib表示要连接到一个库dll文件怎么打开编辑的目标,目标的名字是后面的MyAdd即你写的m函数的名字。
运行完之后你的目录下面,将会出現以下一些dll文件怎么打开编辑:
具体每一个dll文件怎么打开编辑的意思请查帮助,这里只说其中很有用的几个:
libMyAdd.dll是编译好的动态库MyAdd这个函数封装在里面,libMyAdd.h是对应的头dll文件怎么打开编辑在C里面调用这个函数的时候,需要include这个头dll文件怎么打开编辑在这个头dll文件怎么打开编輯的最后,你可以看到下面的内容:
这就是MyAdd的C函数的声明
nargout表示输出变量的个数
a,bc就是对应了m函数的几个变量
注意,ab,c三个变量的类型是mwArray这是matlab提供的一个特殊的变量类型(在7.0的版本,编译之后变量类型是mxArray)。mwArray是一个类具体可以查帮助,当然后面也会讲到
有了上媔的准备,需要设置VC环境好让lib和dll能被成功的调用。
1. 首先建立一个控制台工程(这个我就不详细讲了太easy了)
首先是include头dll文件怎么打开编辑嘚位置,看最后一行(这个根据每一个人的安装目录可能不一样自己去找吧)
然后是lib的位置,不尽包括matlab的静态库的位置还包括刚刚编譯出来的lib的位置,见图的后面两个不用我解释吧
你可以打开这两个目录,看看里面到底有哪些头dll文件怎么打开编辑和lib首先来讲,我们這里要用到的头dll文件怎么打开编辑包括:
你可以到具体的路径下看一看有没有上面几个lib和头dll文件怎么打开编辑
路径设好了,需要制定具體用到的lib了在project Setting-link-Object/library modules里面加入上面提到的几个lib(具体几个lib到底做什么用的,这里不讲了看帮助,或者你试验删去几个lib能不能工作就大概可鉯猜得到他们是干什么的了)
3. 将编译好的dll复制到VC工程的Debug或者Release目录下,以使得dll可以被找到
所有任务完成之后,开始写Cpp试验调用编译之后的函数了
首先,包含应有的头dll文件怎么打开编辑:
然后写main函数:
// 为变量分配内存空间,可以查帮助mwArray
// set data不用我解释了吧,很简单的调用類里面的SetData函数给类赋值
// get data,不用我解释了吧很简单的,调用类里面的Get函数获取取函数返回值
// 后面是一些终止调用的程序
c/c++与matlab混编如果是这种情况的话,伱需要知道输入参数的个数与类型然后按照把m脚本和dll放在一个目录下,像调用函数一样调用就可以了