基于GUI的mcc编译和dll生成
1.mcc的编译
1.1 MCRInstaller编译器的安装
找到Matlab下的MCRInstaller,双击MCRInstaller编译器,运行安装。
1.2编译语言的设置
采用mbuild进行编译语言设定
>> mbuild -setup
MBUILD configured to use 'Microsoft Visual C++ 2015 Professional (C)' for C language compilation.
To choose a different language, select one from the following:
mex -setup C++ -client MBUILD
mex -setup FORTRAN -client MBUILD
选择 mex -setup C++ -client MBUILD ,即C++语言进行设置,得到如下结果:
MBUILD configured to use 'Microsoft Visual C++ 2015 Professional' for C++ language compilation.
此时,用户可以采用Matlab生成exe文件,得到exe文件后,可以独立于Matlab运行。
1.3生成exe文件
输入如下代码:
mcc -m untitled.m
直到结束为止,则生成exe文件。
2.dll生成
开始的环境是win10 64、Matlab 2016b、VS 2015,死活不行呀,老是报引发的异常: 0xC0000005: 读取位置 0x0000000000000008 时发生访问冲突。最后不得已将VS2015换成了VS2013,就可以了^——^还要注意的是VS的编译平台要设置为64位的(我的Matlab为64bit)
https://cn.mathworks.com/support/sysreq/previous_releases.html
dll文件又称“应用程序扩展”,是软文件类型。
2.1Matlab生成dll供Visual Studio调用
2.1.1Matlab编译生成dll
简单的加法运算
function [c]=add(a,b)
c=a+b;
return ;
end
Matlab生成dll文件:
mcc -W cpplib:add -T link:lib add.m
生成了.dll、.h和.lib后缀的3个文件
或者:使用deploytool(参考文献3)
2.1.2设置Visual Studio
- 启动Visual Studio,打开相应项目(或者新建一个项目)
点击项目属性,在VC++中,选择包含目录和库目录。
1:在项目属性中的包含目录添加“Matlab安装目录externinclude;”
2:在项目属性中的库目录添加“Matlab安装目录externincludelibwin64microsoft;
- 进行链接器的设置,选择附加依赖项,设置函数库
添加如下:
add.lib %加法器函数库文件
mclmcrrt.lib %VS 自带库文件
mclmcr.lib %VS 自带库文件
-
在项目头文件中加载add.dll和add.h文件,资源文件加载add.lib
-
VS测试代码:
#include<iostream>
#include"add.h"
#include"mclmcrrt.h"
#include"mclcppclass.h"
#include <stdio.h>
using namespace std;
void main()
{
if (addInitialize()) {
//system("pause");
printf("welcome!!!
");
}
else {
//system("pause");
printf("fail
");
}
mwArray a(1, 1, mxDOUBLE_CLASS);//赋值
a(1, 1) = 1;
mwArray b(1, 1, mxDOUBLE_CLASS);
b(1, 1) = 1;
mwArray c(1, 1, mxDOUBLE_CLASS);
add(1, c, a, b);
cout << c(1, 1) << endl;
addTerminate(); //终止函数lib
mclTerminateApplication(); //终止MCR
}
2.2VS生成dll供Matlab调用
2.2.1 VS准备工作
- 用VS新建一个Win32项目,选择dll,勾选空项目。
- 创建源文件。
vs_add.cpp
#include "vs_add.h"
#include <stdio.h>
float add(float x, float y){
return x + y;
}
vs_add.h
#ifndef VS_ADD_H
#define VS_ADD_H
/*check if the compiler is of C++*/
#ifdef __cplusplus
extern "C"
{
#endif
__declspec(dllexport) float add(float x, float y);
#ifdef __cplusplus
}
#endif
#endif
- 单击生成,在Debug目录下有vs2013_matlab2016b.dll
2.2.2 Matlab调用dll
将得到的dll文件,vs_add.h文件复制到Matlab工作路径。
loadlibrary('vs2013_matlab2016b.dll','vs_add.h');
%libfunctions ysw_VS2010_MATLAB2012B -full
m=calllib('vs2013_matlab2016b','vs_add',1.1,2.1)
unloadlibrary('vs2013_matlab2016b')
参考文献:
http://www.cnblogs.com/newpanderking/articles/4057977.html
Matlab GUI入门与实战
http://blog.csdn.net/u013920434/article/details/52077788