Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用MATLAB引擎错误:计算机中缺少libeng.dll_C++_Matlab_Matlab Engine - Fatal编程技术网

C++ 调用MATLAB引擎错误:计算机中缺少libeng.dll

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

尽管有很多关于这个问题的在线资源,我还是很难从一个简单的.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) 编写了以下程序:

// 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;
    }