新浪博客

C++调用Matlab引擎详解(附可能出现的异常情况的解决办法)

2017-08-29 11:07阅读:
一、Matlab准备
1、打开matlab(2016a),保持默认的工作目录(C:\Program Files\MATLAB\R2016a\bin)。
2、将Matlab配置为C++编译方式,在命令行输入mex -setup,显示:
MEX 配置为使用 'Microsoft Visual C++ 2015 Professional (C)' 以进行 C 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,
您需要更新代码以利用
新的 API。您可以在以下网址找到相关详细信息:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
mex -setup FORTRAN
3、选择 mex -setup C++ ,显示:
MEX 配置为使用 'Microsoft Visual C++ 2015 Professional' 以进行 C++ 语言编译。
警告: MATLAB C 和 Fortran API 已更改,现可支持
包含 2^32-1 个以上元素的 MATLAB 变量。不久以后,
您需要更新代码以利用
新的 API。您可以在以下网址找到相关详细信息:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。
4、在命令行输入mbuild -setup,显示:
MBUILD 配置为使用 'Microsoft Visual C++ 2015 Professional (C)' 以进行 C 语言编译。
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++ -client MBUILD
mex -setup FORTRAN -c
lient MBUILD
5、选择mex -setup C++ -client MBUILD,显示:
MBUILD 配置为使用 'Microsoft Visual C++ 2015 Professional' 以进行 C++ 语言编译。
二、Matlab引擎手动测试
1、关闭Matlab主程序,打开命令提示符(管理员)。
2、输入Matlab /regserver。
3、数秒之后显示出Matlab Command Window,并显示文字:
要开始,请键入以下项之一: helpwin、helpdesk 或 demo。
有关产品信息,请访问 www.mathworks.com。

4、手动测试完成,Matlab引擎可以使用。
三、C++项目设置
1、创建C++空项目(VS2015)。
2、设置项目属性:
平台:X64
配置属性>VC++目录>包含目录:增加 C:\Program Files\MATLAB\R2016a\extern\include;
配置属性>VC++目录>库目录:增加 C:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft;
配置属性>链接器>输入>附加依赖项:libeng.lib;libmx.lib;libmex.lib;mclmcrrt.lib;
3、测试例程
#include
#include
using namespace std;
#pragma comment(lib, 'libeng.lib')
#pragma comment(lib, 'libmx.lib')
#pragma comment(lib, 'libmex.lib')
void main()
{
Engine *ep; //定义Matlab引擎
ep = engOpen(NULL); //启动引擎
engEvalString(ep, 'x=0:0.05:2*pi;y=cos(x);plot(x,y,'.b')'); //命令行语句
cout << 'Hello'; //控制台输出
getchar();
}
执行后,先显示命令控制台,然后显示Matlab Command Window,此时引擎启动完成,之后显示Matlab绘图界面,完成绘图。如果程序运行后不把Matlab Command Window手动关闭,则下次运行时将不会重新启动引擎,提高运行速度。
四、异常
描述:在Matlab内输入mex -setup和mbuild -setup命令时,显示无法找到文件等信息。
原因:mex -setup和mbuild -setup命令分别调用mex.bat和mbuild.bat,当其工作目录中没有这两个文件时出现上述异常。
解决:将Matlab工作目录转到其默认工作目录。
描述:在手动测试Matlab引擎的时候,Matlab Command Window启动时间超过1分钟,或者显示为未响应。
原因:不明。
解决:删除Matlab所有安装文件,重装。
描述:C++项目已经按照上述方法设置,但是依然报错,显示:
错误 LNK1112 模块计算机类型“X86”与目标计算机类型“x64”冲突
原因:该C++项目为win32控制台项目,其调用的32位控制台程序与主程序的64位运行方式冲突。
解决:将C++项目设置为空项目。
描述:C++项目已经按照上述方法设置,但是依然报错,显示:
错误 LNK1112 模块计算机类型“X64”与目标计算机类型“x84”冲突
或:
错误 C2001 未命名标识符“XXXXXX”
原因:Matlab引擎为64位,调用其的主程序也应该是64位的。
解决:将C++平台设置为64位。
五、参考
http://blog.csdn.net/u010910436/article/details/45919457
http://blog.csdn.net/u013166794/article/details/51260334

我的更多文章

下载客户端阅读体验更佳

APP专享