【问题标题】:How to Call Matlab Functions from C++如何从 C++ 调用 Matlab 函数
【发布时间】:2011-06-21 17:12:18
【问题描述】:

我想在我的 C++ 项目中调用 MATLAB 函数。

我正在使用 Matlab R2010a 和 Visual Studio 2010

首先我创建了一个简单的matlab函数:

function y = foo(x)
    y = x+1;

然后我使用matlab编译器使用matlab GUI编译器编译这个函数(文件->新建->部署项目,然后选择C++共享库)。它会生成这个文件 2 个文件夹:distrib 和 src。

发行版包含:

  1. foo.dll
  2. foo.h
  3. foo.lib

src 包含:

  1. foo.cpp
  2. foo.dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

我想在 C++ 应用程序中使用这个文件。我尝试了很多次,但我没有找到方法。我在互联网上找到的所有方法都是使用旧的 matlab 编译器,它产生不同的文件或在旧版本的 Visual Studio 上工作。

那么请谁能帮帮我?

我必须做什么?我必须添加哪些文件/参考以及添加到哪里?我必须定义哪些路径?

【问题讨论】:

    标签: c++ c matlab matlab-deployment matlab-engine


    【解决方案1】:

    也许为时已晚,但为了未来。

    包括foo.h

    C/C++-General-Additional Include Directories 添加到 matlab 标头 (C:\Program Files (x86)\MATLAB\R2009b\extern\include)。

    附加依赖项中的链接器添加foo.libmclmcrrt.libmclcommain.lib

    对于 附加库目录 中的 linker 显示通往 matlab 库的方式(C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft 用于 32 位版本(matlab 和 VS 版本应该相同。我必须安装第二个 Matlab 32 位版本。))。

    我在系统路径中添加了foo.lib 的路径。

    在使用你的库foo.dll之前,你应该初始化MCR和库函数。

    mclInitializeApplication(NULL,0);
    fooInitialize(); 
    

    使用后不要忘记:

    mclTerminateApplication();
    fooTerminate();
    

    还有一些演示代码,如下所示:

    int num = 1;
    double numbrIn = 1.5;
    std::cout<<"now we have " << numbrIn << std::endl;
    mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL);
    array_in.SetData(&numbrIn,num);
    mwArray array_out;
    foo(1, array_out, array_in);
    array_out.GetData(&numbrIn, num);
    std::cout<<"now we have " << numbrIn << std::endl;
    

    【讨论】:

      【解决方案2】:

      编译您的应用程序需要文件foo.hfoo.libfoo.dll 文件需要与生成的应用程序一起提供,通常在同一目录中。

      如果您将foo.h 文件与源文件放在同一目录中,则无需对#include "foo.h" 执行任何特殊操作。您还可以在外部链接器依赖项中添加指向foo.lib 的直接路径。

      如果您想将这些文件存储在您的项目文件夹之外和/或在其他应用程序中重复使用这些文件,您可以阅读VC++ Directories, Projects and Solutions

      编辑:您可能还需要将 MATLAB 库添加到包含和库路径中。查看 MathWorks 支持解决方案Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?

      【讨论】:

      • 我只在头文件中添加了 foo.h,我创建了一个 main.cpp 文件,我包含了 foo.h,我打开了项目属性,我转到链接器,我添加了附加依赖项 foo .lib 并且在构建项目时它给我一个错误,它无法打开这两个源文件 #include "mclmcrrt.h" #include "mclcppclass.h" 它位于 foo.h 你能帮帮我吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多