C++ 调用MATLAB引擎错误:计算机中缺少libeng.dll
尽管有很多关于这个问题的在线资源,我还是很难从一个简单的.cpp程序调用MATLAB 我的目标: 使用Microsoft Visual Studio 2010 Professional 64位构建.cpp程序 为内置函数和图形调用MATLAB引擎(MATLAB R2013b 64位) 我所做的: 在.cpp文件属性页中,我有: 1) 将平台更改为活动(x64) 2) 将以下路径添加到VC++目录 可执行目录:C:\Program Files\MATLAB\R2013b\bin 包含目录:C:\Program Files\MATLAB\R2013b\extern\Include 参考目录:C:\Program Files\MATLAB\R2013b\bin\win64 库目录:C:\Program Files\MATLAB\R2013b\extern\lib\win64\microsoft 3) 编写了以下程序:C++ 调用MATLAB引擎错误:计算机中缺少libeng.dll,c++,matlab,matlab-engine,C++,Matlab,Matlab Engine,尽管有很多关于这个问题的在线资源,我还是很难从一个简单的.cpp程序调用MATLAB 我的目标: 使用Microsoft Visual Studio 2010 Professional 64位构建.cpp程序 为内置函数和图形调用MATLAB引擎(MATLAB R2013b 64位) 我所做的: 在.cpp文件属性页中,我有: 1) 将平台更改为活动(x64) 2) 将以下路径添加到VC++目录 可执行目录:C:\Program Files\MATLAB\R2013b\bin 包含目录:C:\P
// mEng.cpp : Defines the entry point for the console application.
// libeng.dll is in C:\Program Files\MATLAB\R2013b\bin\win64
#include "stdafx.h"
#include <Engine.h>
#include <matrix.h>
#include <iostream>
#include <string>
#include <cmath>
#pragma comment (lib, "libmat.lib")
#pragma comment (lib, "libmx.lib")
#pragma comment (lib, "libmex.lib")
#pragma comment (lib, "libeng.lib")
#pragma comment (lib, "libut.lib")
using namespace std;
int main()
{
Engine *m_pEngine;
if (!(m_pEngine = engOpen("")))
{
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
//Now call the MATLAB script through MATLAB Engine
engEvalString(m_pEngine, "script");
cout << "Hit return to continue\n\n";
fgetc(stdin);
//Close the MATLAB Engine
engClose(m_pEngine);
return EXIT_SUCCESS;
}
//mEng.cpp:定义控制台应用程序的入口点。
//libeng.dll位于C:\Program Files\MATLAB\R2013b\bin\win64中
#包括“stdafx.h”
#包括
#包括
#包括
#包括
#包括
#pragma注释(lib,“libmat.lib”)
#pragma注释(lib,“libmx.lib”)
#pragma注释(lib,“libmex.lib”)
#pragma注释(lib,“libeng.lib”)
#pragma注释(lib,“libut.lib”)
使用名称空间std;
int main()
{
引擎*m_pEngine;
如果(!(m_pEngine=engOpen(“”))
{
fprintf(stderr,“\n无法启动MATLAB引擎\n”);
返回退出失败;
}
//现在通过MATLAB引擎调用MATLAB脚本
Engelastring(m_pEngine,“脚本”);
我面对同样的问题,花了一天时间来解决它。
这就是我的答案
实际上,您过度定义了不同的目录(请参阅“路径编辑”链接)。
只做这些就足够了:
项目属性->VC++目录->库目录。在此处添加路径C:\Program Files\MATLAB\R2016a\bin\win64(版本和路径可能不同,但想法是将路径设置为与MATLAB相同的文件夹)
项目属性->C/C++->常规->其他包含目录。添加路径C:\Program Files\MATLAB\R2016a\extern\Include(此文件夹的路径)
项目属性->链接器->常规->附加库目录。添加路径C:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft
项目属性->链接器->输入->其他依赖项。在此处添加:libeng.lib;libmx.lib;
最后也是最重要的一点:将MATLAB引擎dll库的路径添加到您的Windows。这一步解决了您的问题。我们可以这样做:我的电脑->右键单击:设置。打开的窗口系统。左下角:高级系统设置
高级选项卡
在用户的环境变量中,按“创建…”按钮并添加此变量:
变量名:路径
变量值:C:\Program Files\MATLAB\R2016a\bin\win64
此路径是libeng.dll所在位置的参考。
重要时刻:可能需要重新启动VS,甚至重新启动计算机
希望能帮助一些开始在MATLAB和C++工作的人! < P> >我的笔记如下:
不过,我想借此机会重新格式化此处给出的说明:
要在Microsoft Visual Studio 9.0(2008)或Microsoft Visual Studio 10.0(2010)环境中编译MATLAB引擎应用程序,请执行以下步骤:
打开Microsoft Visual Studio并选择
文件->新建->项目
然后选择:
VisualC++ > >通用>空项目
在此之后,在中输入项目名称及其位置
显示文本区域,然后单击“确定”
注意:此步骤将创建解决方案文件夹和
在那里放一个项目文件夹,这样你就不想设置它了,全部都准备好了
工作,然后更改文件夹,因为这将破坏解决方案,您将
我们必须从头开始
在解决方案资源管理器中的“源文件”文件夹上单击鼠标右键,然后单击
添加->“新项目…”
选择“C++文件(.cpp)”,输入文件名
(如enginedemo.cpp
)如您所愿。单击“确定”
从源文件中复制代码:engwindemo.c
,并将其粘贴到此
文件enginedemo.cpp
。文件engwindemo.c
可以从以下位置获得
地点:
$MATLABROOT/extern/examples/eng_mat
其中,$MATLABROOT
是MATLAB根目录,可由
输入命令:
matlabroot
在MATLAB命令提示符下
我建议你在记事本上打开它,如果它有一些
奇怪的格式,修复并保存它,使其在打开时看起来像一个普通的C文件
它在记事本(或gedit或其他任何东西)中
这就是VisualStudio中发生变化的地方,我希望这能有所扩展
对VS代码、Eclipse或任何您想要使用的IDE透明。
因此,我将用罗马数字对属性更改部分重新编号,并修复
秩序
还要确保每次更改后都按ENTER键,然后应用。
在进入下一部分之前,请确保已完成更改。
仔细检查拼写,并确保您的计算机上存在目录
站台
进入“解决方案资源管理器”视图,右键单击项目名称并单击
在解决方案资源管理器中选择“属性”以打开项目属性。
打开此窗口后,进行以下更改:
转到属性页顶部的配置栏。
您肯定要从这个设置开始。
选择配置、调试或发布,或“所有配置”(如果需要)
更改将同时应用于调试和发布,否则您将不得不全部执行这些更改
对于另一个配置,这可能不是一个坏主意,例如
单个发布选项通常是更“优化”的版本
相应的调试选项。注意,您可以运行
在改变财产方面遇到了严重的麻烦
PATH=$matlabroot\bin\win32
PATH=$matlabroot\bin\win64 If you want to use an absolute path instead,
PATH=C:\Program Files\MATLAB\R2013a\bin\win32; (for 32 bit MATLAB)
PATH=C:\Program Files\MATLAB\R2013a\bin\win64; (for 64 bit MATLAB)
$MATLABROOT\extern\include
c:\Program Files\MATLAB\R2019a\extern\include;
$MATLABROOT\extern\lib\win32\microsoft
$MATLABROOT\extern\lib\win64\microsoft
$MATLABROOT\bin\win32
$MATLABROOT\bin\win64
PATH=c:\;....;c:\Program Files\MATLAB\Rxxxxx\bin\win(32/64);
using namespace std;
int main()
{
Engine *eng;
eng=engOpen(""); // put a breakpoint here
cout << "...now you see it...\n"
engClose(eng); // put a breakpoint here
cout << "...now you don't!\n"
return 0;
}