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++编辑器);
    • 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文件。

    注意:开始在使用如上命令进行编译时,一直报如下错误:Test checkout of feature ‘Compiler’ failed,主要原因是安装的compiler破解不完全导致的,解决方法见如下网页:
    http://blog.csdn.net/smilebluesky/article/details/42987985

    编译完成检查

    编译完成后,将多出9个文件,分别为如下信息:libname.dll、libname.lib、libname.h、libname.cpp、libname.def、libname.exp、libname.exports、mccExcludeFiles.log、readme.txt。

    虽然生成了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编码,将其改为使用多字节字符集即可。具体为:项目->属性->配置属性->常规->字符集,更改即可。

  • 参考文献

    http://blog.csdn.net/leixiaohua1020/article/details/38318517

    http://blog.sina.com.cn/s/blog_4a0824490102v5ga.html

    http://blog.csdn.net/smilebluesky/article/details/42987985

你可能感兴趣的:(matlab)