MATLAB与VS的混合编程实践/MATLAB代码移植

前言

 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程。

在matlab中将.m文件编译生成库文件等供外部的vs程序调用,实现混合编程。

实现步骤

1.matlab中算法代码编译生成库文件、头文件等;

2.创建并配置VS工程;

3.安装配置MCR方便软件移植;

实现环境

matlab版本:matlab2015a

vs版本:vs2013

PC系统:win7_x64

实现过程

1.matlab中算法代码编译生成库文件、头文件等;

1)在matlab写一个测试代码(一般是系统算法对应matlab函数);


function [sum, prod] = sum_prod(p1, p2)sum = p1+p2;prod = p1.*p2;end1.2.3.4.

2)生成库文件、头文件等;

方法有两种,一种是使用matlab命令行,一种是使用matlab菜单栏工具。本文使用的是第二种方法。

方法一:

(1)在命令行输入命令!mcc查看是否带有mcc编译器;

matlab与vs混合编程/matlab移植_编译器

(2)命令窗口输入mbuild -setup选择要使用的c++编译器,本文选择的是mex -setup C++ -client MBUILD 编译器;


matlab与vs混合编程/matlab移植_库文件_02

(3)命令窗口输入deploytool命令,剩余步骤参考方法二;

方法二:

(1)matlab命令行输入deploytool即可;

matlab与vs混合编程/matlab移植_库文件_03

(2)输入deploytool命令之后出现以下对话框,选择Library Compiler选项;

matlab与vs混合编程/matlab移植_#pragma_04

(3)按照下图指示步骤生成文件;

 

matlab与vs混合编程/matlab移植_编译器_05

(4)生成的文件夹如下图,所需要的库文件、头文件在for_redistribution_files_only文件夹中;


matlab与vs混合编程/matlab移植_#pragma_06

(5)将相关库文件、头文件复制到VS工程目录下;

matlab与vs混合编程/matlab移植_#pragma_07

2.创建并配置VS工程;

1)创建VS工程,新建源文件作为测试;


#include <iostream>#include "sum_prod.h"#include "mclmcrrt.h"#include "mclcppclass.h"#pragma comment(lib,"mclmcrrt.lib")#pragma comment(lib,"sum_prod.lib")using namespace std;int main(){    if (!sum_prodInitialize())  //必须写    {        //cout << "初始化失败!" << endl;        return -1;    }    double p[2][2] = { 1, 2, 3, 4 };    mwArray X(2, 2, mxDOUBLE_CLASS);    mwArray Y(2, 2, mxDOUBLE_CLASS);    mwArray SUM(2, 2, mxDOUBLE_CLASS);    mwArray PROD(2, 2, mxDOUBLE_CLASS);    for (int i = 0; i < 2; i++)    {        for (int j = 0; j < 2; j++)        {            X(i + 1, j + 1) = p[i][j];            Y(i + 1, j + 1) = p[i][j];        }    }    sum_prod(2, SUM, PROD, X, Y);    double  sum[2][2], prod[2][2];    for (int i = 0; i < 2; i++)    {        for (int j = 0; j < 2; j++)        {            sum[i][j] = SUM(i + 1, j + 1);            prod[i][j] = PROD(i + 1, j + 1);        }    }    for (int i = 0; i < 2; i++)    {        for (int j = 0; j < 2; j++)        {            cout << sum[i][j];        }        cout << endl;    }    cout << endl;    for (int i = 0; i < 2; i++)    {        for (int j = 0; j < 2; j++)        {            cout << prod[i][j];        }        cout << endl;    }    cout << endl;    system("pause");    return 0;}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.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.

2)配置VS工程;

(1)配置matlab的属性(博客中使用的是matlab2015a版本);

项目属性VC++目录选型中添加包含目录和库目录;

包含目录:C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\include;

库目录:C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\lib\win64\microsoft;

matlab与vs混合编程/matlab移植_编译器_08

(2)链接器输入选项添加附加依赖项;

mclmcrrt.lib;

sum_prod.lib

matlab与vs混合编程/matlab移植_#pragma_09

另一种方法是直接在源文件中添加语句;

#pragma comment(lib,"mclmcrrt.lib")
#pragma comment(lib,"sum_prod.lib")

注意:

不同的源文件对应的lib可能会有不同;

一般如果缺少lib的话会出现如下图所示的报错信息;

matlab与vs混合编程/matlab移植_编译器_10

(3)另,直接将打印信息输出到控制台,将会占用内存,可以使用下图所示的方法将打印信息保存在txt文件中;

打开cmd,定位到可执行文件所在目录,按照下图操作即可得到日志文件log.txt;

matlab与vs混合编程/matlab移植_编译器_11

3.安装配置MCR方便软件移植;

要想在没有安装matlab的电脑上运行matlab程序,不想安装matlab,需要安装MCR编译器;

1)MCR安装程序;

(1)官网math上下载;

(2)在matlab安装目录下复制;

文件目录:(我的是C:\Program Files\MATLAB\MATLAB Production Server\R2015a\toolbox\compiler\deploy\win64)

.\R2015a\toolbox\compiler\deploy\win64;

matlab与vs混合编程/matlab移植_库文件_12

2)安装MCR编译器;

(1)点击安装MCRInstaller.exe;

(2)创建安装目录;

(3)开始安装,接受许可条款;

(4)选择安装路径,等待安装完成即可;

 本文使用的是默认安装;

3)配置环境变量;

安装完成之后需要将MCR编译器安装目录添加到系统环境变量中;

(1)我的电脑>属性>高级系统设置;

matlab与vs混合编程/matlab移植_编译器_13

(2)在系统属性高级中点击环境变量;


matlab与vs混合编程/matlab移植_库文件_14

(3)系统变量中新建环境变量;

matlab与vs混合编程/matlab移植_#pragma_15

(4)编辑添加系统变量;

matlab与vs混合编程/matlab移植_编译器_16

变量值就是MCR安装目录(本文默认目录C:\Program Files\MATLAB\MATLAB Runtime\v85\runtime\win64);

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空