Toriyung

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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   Toriyung  阅读(217)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示