Toriyung

导航

C++/Matlab 混合编程

这里主要说C++调用Matlab ,当然,反过来也行

 

Matlab

  首先写好你需要编译成C++的.m文件

  在matlab窗口输入

mex -setup
mbuild -setup

  默认C,可以改成C++

 

  然后继续输入

deploytool

  选择第三个

 

  按顺序操作:定义库的名称,选择C++ Shared Library,添加你写好的.m文件,Package

 

  然后生成的三个文件夹下的_only内就是生成好的库文件

 

没有matlab环境的VS编程环境配置

   先在官网下载安装MCR,注意和写.m文件使用的matlab的版本一致

  点击这个链接,里面每个版本对应的detail说明书可以看到支持的VS版本

 

然后重启!然后重启!然后重启!

 

VS配置matlab环境

  1. 头文件路径配置:extern\include

  2. 库文件路径配置:extern\lib\win64\microsoft

    链接器.lib名称加上

  3. 按第一部分最后得到的文件夹设置你所编译的.m文件成的.lib库文件配置:参考https://blog.csdn.net/u011913417/article/details/102679274,实测按如下步骤:

    3.1 .lib和.h按第一部分最后路径配置

    3.2 .dll放到和".vcxproj"文件同目录

    3.3*(重点) VS里面调试–>窗口–>异常设置–>Win32 Exceptions勾选去掉

 

cpp文件

开头

#pragma comment(lib, "mclmcrrt.lib")//引入的mat库文件
#pragma comment(lib, "mclmcr.lib")//同上
#pragma comment(lib, "yourMlib.lib")//自己的库文件
#include "yourMlib.h"//自己的头文件

 

调用

 

 

    //开始调用,初始环境
    if (!myode23tbInitialize())    //语句是***Initialize(),***用编译的matlab包名称替换
    {
        cout << "failed" << endl;
        system("pause");
    }


    myode23tb();    //调用主要函数

    //结束调用
  myode23tbTerminate();
  mclTerminateApplication();    

 

 

初始化环境会加载许多dll文件,过程会比较慢(本机子接近15s)

 

 

 

 

 

参考:

  https://www.cnblogs.com/ph1sh/p/14710686.html

     https://blog.csdn.net/u013346193/article/details/80542879

 

posted on 2023-07-13 14:33  Toriyung  阅读(266)  评论(0)    收藏  举报