您的位置:首页 > 编程语言 > MATLAB

matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)

2015-10-21 15:27 477 查看
在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目的。

1. 使用matlab生成dll文件

1.1 首先需要带有mcc编译器的matlab软件,这个可以通过在matlab命令行中输入:
!mcc
命令来查看



1.2然后再命令窗口输入
mbuild -setup
选中要使用的C++编译器,在这里我选择了VS2013的编译器。



选好编译器后再命令窗口输入
deploytool
进入编译窗口,



1.3 在弹出的窗口中选择第二项,即生成dll动态链接库的形式,之后会弹出如下窗口



在MATLAB Complie对话框中的左上角APPLICATION TYPE中选择C++ Shared Library类型,在旁边的白色框中点击加号将需要编译成dll的.m文件添加到当前项目中,



1.4之后就可以点击右上角的package按钮生成dll文件了。



点击之后matlab会弹出编译进行的对话框,此时只需要等待既可以了



等待一段时间之后就可以在指定的目录下看到生成dll以及相应的.h和.lib文件





接下来我们用刚刚生成的dll文件进行测试

2.dll简单测试

使用新建一个win32的空的控制台项目,同时将刚刚生成的mysvd.h,mysvd.lib和mysvd.dll拷贝到当前项目文件夹下,然后输入以下代码

#include <iostream>
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "mysvd.h"
using namespace std;

#pragma comment(lib,"mysvd.lib")

int main()
{
if (!mysvdInitialize())    //初始化,在libmysvd.h中
{
cout << "Could not initialize libmysvd!" << endl;
exit(0);
}
double data[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
mwArray a(3, 3, mxDOUBLE_CLASS, mxREAL);

a.SetData(data, 9);
cout << a << endl << endl;  //显然,mwArry类对<<是有运算符重载的

mwArray s(3, 3, mxDOUBLE_CLASS, mxREAL);
mwArray v(3, 3, mxDOUBLE_CLASS, mxREAL);
mwArray d(3, 3, mxDOUBLE_CLASS, mxREAL);

mysvd(1, s, a);  //调用自己用matlab写的函数,对a做奇异值分解

cout << s << endl << endl;
cout << v << endl << endl;

for (int i = 1; i < 4; i++) //逐个显示元素
{
for (int j = 1; j < 4; j++)
{
cout << d.Get(i, j) << "  ";
}
cout << endl;
}

cin.get();
return 0;
}


然后点击菜单栏下的项目->属性,在项目属性对话框VC++选项中:



包含目录:C:\Program Files (x86)\MATLAB\R2014a\extern\include

库目录:C:\Program Files (x86)\MATLAB\R2014a\extern\lib\win32\microsoft



在链接器->输入选项中,附加依赖项:

libmat.lib
libmex.lib
mclmcr.lib
mclmcrrt.lib




也可以把刚才库目录下的所有lib文件的名字输入进去。

配置好之后就可以点击visual studio上的运行按钮执行程序了,输出结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  win7 visual studio matlab