VS中调⽤Matlab封装的库⽂件
VS中调⽤Matlab封装的库⽂件
简介
由于项⽬需要,要编写多线程实现功能,但Matlab天⽣多线程缺陷,查相关资料,可以通过Timer对象实现,但考虑到C++程序的⾼效性,且⼀直在使⽤C++,故决定将Matlab编译成C++可以调⽤的库⽂件,然后在VS下⾯调⽤Matlab程序,下⾯是在Matlab封装成库⽂件,以及VS调⽤Matlab库⽂件详细过程。
环境
系统:Win7(64位)、Matlab 2014Ra、VS2012
步骤
1)将Matlab中的.m⽂件编译成对应C++的库⽂件
Matlab编译简介
将Matlab中的.m⽂件编译成对应的C++库⽂件,需要利⽤对应的编译器mbuild。下⾯简要介绍⼀下mcc
、mbuild、mex:
mcc:将.m⽂件转换成C/C++⽂件和相应的Mex包裹⽂件(需要Matlab编辑器),但在特定条件下可以⾃动调⽤mbuild或者mex;
mex:将C/C++⽂件(⼊⼝函数为mexfunction())编译成mex(dll)⽂件(需要C/C++编辑器);
mysql下载的vs库放在那个文件里mbuild:将C/C++⽂件(⼊⼝函数为main())⽣成可独⽴运⾏的C应⽤程序(需要C/C++编辑器);
设置Matlab编译环境
安装mbuild,具体在Matlab命令控制台中输⼊如下命令:
mex -setup
然后选择与⾃⼰VS编译器相对应的编译器,选择C++编译环境即可。
使⽤mcc命令编译.m⽂件
编译要使⽤的matlab程序中.m对应的库⽂件,使⽤如下命令:
mcc -v -W cpplib:libname -T link:lib name.m
其中libname:为⾃⼰编译后的库名;name.m为对应所要封装成库的.m⽂件。
编译完成检查
编译完成后,将多出9个⽂件,分别为如下信息:libname.dll、libname.lib、libname.h、libname.cpp、libname.def、
虽然⽣成了9个⽂件,但在VS中只需要使⽤其中的三个⽂件,分别为:libname.h、libname.dll、libname.dll。
2)在VS2012下调⽤Matlab程序
在VS建⽴控制台的空项⽬
配置项⽬属性
VC++包含⽬录,主要是Matlab安装⽬录下的include⽬录和⾃⼰编译的库⽬录,具体如下:
E:\Program Files\MATLAB\R2014a\extern\include\win64
E:\Program Files\MATLAB\R2014a\extern\include
⾃⼰编译的头⽂件⽬录,按照⾃⼰实际存放的位置来填写即可。
VC++库⽬录,主要是Matlab安装⽬录下的lib⽬录,具体如下:
E:\Program Files\MATLAB\R2014a\bin\win64
E:\Program Files\MATLAB\R2014a\extern\lib
E:\Program Files\MATLAB\R2014a\extern\lib\win32\microsoft
E:\Program Files\MATLAB\R2014a\extern\lib\win32\lcc
E:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft
⾃⼰编译的库⽂件⽬录,按照⾃⼰实际存放的位置来填写
C/C++常规
E:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft
链接器,添加依赖库,具体如下:
libeng.lib、libmat.lib、libmex.lib、libmx.lib、mclmcrrt.lib、mclmcr.lib、libname.lib
注意:上⾯的环境的配置时,有⼀些是可以没有,主要还是要看VS下建⽴的项⽬时32位的还是64位的,可以根据具体情况进⾏配置。此外上⾯⾃⼰编译的库可以不⽤填写相应的⽬录,但是这种情况下,需要将对应libname.dll、libname.h、libname.lib三个⽂件放在⾃⼰项⽬的⽬录下。
添加头⽂件并写main函数
在建⽴的项⽬中导⼊头⽂件,利⽤导⼊现有项⽬即可实现。然后编写对应的调⽤main⽂件即可。主要main函数中调⽤Matlab中的库⽂件,需要使⽤对应的输⼊输出参数对象,主要为mwArray等。
注意:代⼊⾃⼰编译⽣成的.h⽂件,可能出现⼀定的错误,如”const char *” 类型的实参与 “LPCWSTR” 类型的形参不兼容,此错误对应的是编码集的问题,VS中默认的编码集为Unicode编码,将其改为使⽤多字节字符集即可。具体为:项⽬->属性->配置属性->常规->字符集,更改即可。
参考⽂献
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论