C++ 和 Matlab 混合编程配置

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: [email protected]  
/* 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 中被引用;



解决步骤:



猜你喜欢

转载自blog.csdn.net/missxy_/article/details/79941697