在新版本 2017b 中,Matlab 发布了适用于 C++ 的新 MATLAB 引擎 API:https://fr.mathworks.com/help/matlab/calling-matlab-engine-from-cpp-programs.html
当我尝试使用这个 API 时(只是为了在开始时启动 Matlab!),我在使用时遇到了问题:
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
编译没问题,但是执行时:
这是调用堆栈:
matlab::engine::initSession --> matlab::engine::startMATLAB --> matlab::engine::startMATLABAsync --> engine_create_session
现在,我用不同的方式来完成我的工作,但我不想让问题得不到解决。有人能发现这个 API 的问题吗?
我的配置:
几天前,我遇到了同样的问题:这里
因此,我在 MATLAB 中提出了请求技术支持的请求。他们建议按照以下对我有用的方式构建项目:
在链接器输入下,将以下名称添加到标记为附加依赖项的字段中:
libmat.lib
libMatlabEngine.lib
libMatlabDataArray.lib
确保Windows系统中有以下目录
环境路径:
C:\Program Files\MATLAB\bin\win64;
C:\Program Files\MATLAB\extern in\win64
现在,构建项目并运行您的应用程序。
就像评论中一样,我通过将Matlab从R2017b升级到R2018b解决了这个问题!
我在测试 R2020b 时注意到同样的问题
虽然在 R2020a 上运行良好,但在 R2020b 上运行时出现运行时错误
std::unique_ptr matlabPtr = startMATLAB();
最好的解决方案非常简单。设置包含和库文件夹后,请勿将任何 dll 文件复制到您自己的构建文件夹中。然后,它就会起作用。