C++ 和 Matlab 混合编程配置
前言:近来项目中需要C++的程序调用MATLAB里的函数库,学习下这方面的知识,读者可以进行参考。
环境: win10; VS2010; MATLAB2014a
1. 首先打开MATLAB,依次在命令行界面输入:mex -setup 和 mbuild -setup。
选择相应的C++版本!
2. 写一个两数相减的函数;
3. MATLAB命令行输入以下命令,会生成相应的库和文件:
mcc -W cpplib:libsub -T link:lib sub.m
4. 新建Win32控制台程序TwoNumSub,并将上图的*.dll,*.h,*.lib拷贝至工程中;
5. VS环境配置,
- 项目右键->属性->C/C++->常规->附件包含目录:添加
- <MATLAB>\R2014a\extern\include\win64
- <MATLAB>\R2014a\extern\include\
- 项目右键->属性->链接器->常规:添加
- <MATLAB>\R2014a\extern\lib\win32\microsoft
- <MATLAB>\R2014a\extern\lib\win64\microsoft
最后配置link连接器,添加:
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libsub.lib(最后这一个是sub.m生成的)
6. 将libsub.h添加到工中;
7. main中代码程序:
#include <iostream>
#include "libsub.h"
#include "engine.h"
using namespace std;
/************************************************************************/
/* Author: Lcy
/* Mail: 164917669@qq.com
/* Bolg: http://blog.csdn.net/MissXy_
/* Describe: C++调用MATLAB函数,实现相减功能
/* Date: 2018-4-14
/************************************************************************/
int main()
{
if (!libsubInitialize())
{
return false;
}
int a =5, b =3;
int c;
mwArray mwA(1, 1, mxINT32_CLASS);
mwArray mwB(1, 1, mxINT32_CLASS);
mwArray mwC(1, 1, mxINT32_CLASS);
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
sub(1, mwC, mwA, mwB);
c = mwC.Get(1,1);
cout<< "c="<< c<< endl;
libsubTerminate();
return 0;
}
8. 运行结果:
可能会出现的错误:
1>main.obj : error LNK2019: 无法解析的外部符号 _libsubTerminate,该符号在函数 _main 中被引用;
解决步骤: