我正在努力从一个简单的.cpp程序中调用MATLAB,尽管这个问题有许多在线资源。
我的目标:
使用Microsoft Visual Studio 2010 Professional 64位构建.cpp程序 调用MATLAB Engine获取内置函数和图形(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)写了以下程序:
// 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;
}
收到的错误:
“程序无法启动,因为您的计算机缺少libeng.dll。请尝试重新安装该程序以解决此问题。“
答案 0 :(得分:2)
我遇到了同样的问题,花了一天时间来解决它。 所以这是我的答案。
实际上,您会过度定义不同的目录(请参阅&#34;路径编辑&#34;链接)。 这就足够了:
高级标签
在您的用户的环境变量中,按“创建...”按钮并添加以下内容: 变量名称:PATH 变量值: C:\ Program Files \ MATLAB \ R2016a \ bin \ win64
此路径是您的libeng.dll所在位置的参考。 重要时刻:它可能需要重新启动VS甚至重新启动计算机。
希望它能帮助一些开始使用MATLAB和C ++的人!
答案 1 :(得分:-4)
在此处按照我的说明操作:
我想借此机会重新格式化那里给出的说明:
要在 Microsoft Visual Studio 9.0 (2008) 或 Microsoft Visual Studio 10.0 (2010) 环境中编译 MATLAB 引擎应用程序,请执行以下步骤:
打开 Microsoft Visual Studio 并选择
文件->新建->项目
然后选择:
Visual C++ -> 常规 -> 空项目
在此之后,输入项目名称及其在 指示的文本区域,然后单击“确定”。
注意这一步要非常小心,因为它会创建解决方案文件夹和 把一个项目文件夹放在那里,所以你不想设置它,把它全部搞定 工作然后更改文件夹,因为这会破坏解决方案,你会 必须从头开始。
右键单击 SOLUTION EXPLORER 中的 SOURCE FILES 文件夹,然后单击
添加 ->“新项目...”
选择“C++文件(.cpp)”,输入文件名
(如enginedemo.cpp
)如您所愿。点击确定。
从源文件复制代码:engwindemo.c
,然后粘贴到这个
文件 enginedemo.cpp
。文件 engwindemo.c
可以从以下位置获得
地点:
$MATLABROOT/extern/examples/eng_mat
其中 $MATLABROOT
是 MATLAB 根目录,可以由
输入命令:
matlabroot
在 MATLAB 命令提示符处。
我建议此时您在记事本中打开它,如果它有一些 奇怪的格式,修复并保存它,使其在打开时看起来像一个普通的 C 文件 它在记事本(或 gedit 或其他)中。
这是 Visual Studio 中发生变化的地方,我希望这有所扩展 对 VS Code、Eclipse 或您想使用的任何 IDE 透明。 所以我将用罗马数字重新编号属性更改部分并修复 订购。
还要确保在每次更改后按 ENTER 然后应用。 在转到下一部分之前,请确保更改。 仔细检查拼写并确保目录存在于您的 平台。
进入解决方案资源管理器视图,右键单击项目名称并 在解决方案资源管理器中选择属性以打开项目属性。 打开此窗口后,进行以下更改:
转到属性页顶部的配置栏。 您绝对想从这个设置开始。 如果需要,请选择配置、调试或发布,或“所有配置” 更改适用于调试和发布,否则您将不得不全部执行 再次为其他配置。这可能不是一个坏主意,因为 单独的发布选项通常是更“优化”的版本 相应的调试选项。注意你可以运行 在之间切换时更改属性值遇到了严重的麻烦 调试和发布模式,如果IDE崩溃,请不要惊讶,解决方案 数据库被损坏,即使调试不会建立,你有 重新开始。首先让调试工作,备份整个解决方案, 然后“克隆”要发布的调试设置,然后调整发布 一次设置一个,确保代码仍然可以构建和运行 每次更改之间。
如果编译到 64 位 Windows,请将目标从 x86 更改为 x64 并使用 64- 位 DLL 和库文件。
如果这不在最顶部的配置选项中,它说 “配置管理器”(如在 VS2015 中),然后按照您的 IDE 说明进行操作... 如以下链接所述:
https://www.microsoft.com/en-us/download/details.aspx?id=55984
下
配置属性->调试
在环境中添加以下目标路径: (适用于 32 位 MATLAB)
PATH=$matlabroot\bin\win32
(对于 64 位 MATLAB)
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)
(可能可以跳过这里的“PATH=”,因为它似乎没有留在那里, 否则这直接来自 MATLAB 参考 )
在C/C++ General下,在ADDITIONAL字段添加如下目录 包括目录:
$MATLABROOT\extern\include
即
c:\Program Files\MATLAB\R2019a\extern\include;
在您输入的每一行的末尾放置一个分号,作为路径。后 该部分中的 .lib 文件也是如此。
在 C/C++ 预编译头文件下,选择“不使用预编译头文件”。 (在发布模式下设置为“是”)
在链接器常规下,将库目录添加到字段ADDITIONAL 图书馆目录: (适用于 32 位 Windows)
$MATLABROOT\extern\lib\win32\microsoft
(适用于 64 位 Windows)
$MATLABROOT\extern\lib\win64\microsoft
即 c:\Program Files\MATLAB\Rxxxxx\extern\lib\win(32|64)\microsoft;
在链接器输入下,将以下库名称添加到标记为 额外的依赖: (在其他任何内容之前使用此字符串) libeng.lib;libmat.lib;libmx.lib; 我不知道顺序是否真的很重要,但列出了原始参考 它们按逆字母顺序排列。 “两种方式我都听说过”。
好的,现在你已经完成了对 VS 项目属性页的更改,保存更改 (正如您一直以来通过在每次更改后单击“应用”所做的那样)并单击 行。属性页窗口将关闭。此时您的代码将构建 但仍然不会调用Matlab。再次备份解决方案。
现在更改 DOS/WINDOWS 环境路径字符串。 我会保存解决方案,关闭 VS,备份它,更改 PATH 并 重新打开 VS 并尝试构建您的程序并运行它并使其工作。 必须更改 PATH 字符串,以便 bin\win(32:64) 目录是 路径上第一个与Matlab相关的实例。
进入“高级系统设置”\环境 为此,请通过单击开始 -> 右键单击来检查 Windows 系统路径 在计算机上 -> 属性 -> 高级系统设置 -> 环境 变量 -> 系统变量 -> 打开“路径”进行编辑。 并像这样修改 PATH 变量:
确保以下目录在 PATH 中: (适用于 32 位 Windows)
$MATLABROOT\bin\win32
(适用于 64 位 Windows)
$MATLABROOT\bin\win64
它不必是路径中的第一个目录,但必须是 路径中的第一个 MATLAB 目录
PATH=c:\;....;c:\Program Files\MATLAB\Rxxxxx\bin\win(32/64);
matlab.exe
在 \bin
中;你可能希望在路上也没有
在 \bin\win64 条目之前...
注意:如果机器安装了多个 MATLAB,则安装目录 目标平台必须位于任何其他 MATLAB 目录之前(对于 例如,在编译 64 位应用程序时,MATLAB 中的目录 64 位安装必须是 PATH 上的第一个)。
还要确保您的目标安装 MATLAB 注册为 COM 服务器:
https://www.mathworks.com/help/matlab/ref/regmatlabserver.html 对于 Matlab 2020a 及更高版本,请尝试 comserver('query') 和 comserver('register')。 对于 2019 年及更早版本,请使用 regmatlabserver()(以管理员身份运行 Matlab)。
构建并执行应用程序。
所以我包含了一个简单的应用程序来演示功能: #include "stdafx.h" #include "engine.h" #包括
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;
}