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;
end
2)生成库文件、头文件等;
方法有两种,一种是使用matlab命令行,一种是使用matlab菜单栏工具。本文使用的是第二种方法。
方法一:
(1)在命令行输入命令!mcc查看是否带有mcc编译器;

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

(3)命令窗口输入deploytool命令,剩余步骤参考方法二;
方法二:
(1)matlab命令行输入deploytool即可;

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

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

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

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

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 -;
}
double p[][] = { , , , };
mwArray X(, , mxDOUBLE_CLASS);
mwArray Y(, , mxDOUBLE_CLASS);
mwArray SUM(, , mxDOUBLE_CLASS);
mwArray PROD(, , mxDOUBLE_CLASS);
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
X(i + , j + ) = p[i][j];
Y(i + , j + ) = p[i][j];
}
}
sum_prod(, SUM, PROD, X, Y); double sum[][], prod[][];
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
sum[i][j] = SUM(i + , j + );
prod[i][j] = PROD(i + , j + );
}
}
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
cout << sum[i][j];
}
cout << endl;
}
cout << endl;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
cout << prod[i][j];
}
cout << endl;
}
cout << endl;
system("pause");
return ;
}
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;

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

另一种方法是直接在源文件中添加语句;
#pragma comment(lib,"mclmcrrt.lib")
#pragma comment(lib,"sum_prod.lib")
注意:
不同的源文件对应的lib可能会有不同;
一般如果缺少lib的话会出现如下图所示的报错信息;

(3)另,直接将打印信息输出到控制台,将会占用内存,可以使用下图所示的方法将打印信息保存在txt文件中;
打开cmd,定位到可执行文件所在目录,按照下图操作即可得到日志文件log.txt;

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;

2)安装MCR编译器;
(1)点击安装MCRInstaller.exe;
(2)创建安装目录;
(3)开始安装,接受许可条款;
(4)选择安装路径,等待安装完成即可;
本文使用的是默认安装;
3)配置环境变量;
安装完成之后需要将MCR编译器安装目录添加到系统环境变量中;
(1)我的电脑>属性>高级系统设置;

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

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

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

变量值就是MCR安装目录(本文默认目录C:\Program Files\MATLAB\MATLAB Runtime\v85\runtime\win64);
参考
1.混合编程:http://blog.csdn.net/wind_liang/article/details/51402224
2.MCR安装:https://jingyan.baidu.com/article/19020a0a057462529d2842d6.html
3.http://blog.csdn.net/sjhuangx/article/details/49305237
完
做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
matlab与vs混合编程/matlab移植的更多相关文章
- matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)
matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...
- [转] Matlab与C++混合编程,添加OpenCV库
原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...
- Matlab与C++混合编程,添加OpenCV库
最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难 ...
- Matlab与C++混合编程 1--在C++中调用自己写的matlab函数
在Visual Studio中使用C++中调用MATLAB程序 在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目 ...
- 【目录】Matlab和C#混合编程文章目录
本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
- Matlab与.NET混合编程解决人脸识别问题
原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...
- Matlab与C++混合编程(依赖OpenCV)
Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...
- [转] Matlab与C++混合编程(依赖OpenCV)
作者 zouxy09@qq.com,原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的M ...
随机推荐
- 关于python中的 “ FileNotFoundError: [Errno 2] No such file or directory: '……'问题 ”
今天在学python时,在模仿一个为图片加上图标并移动到指定文件夹的程序时遇到“FileNotFoundError: [Errno 2] No such file or directory: '152 ...
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...
- 递推2--过河卒(Noip2002)
递推2--过河卒(Noip2002) 一.心得 写出递推公式就OK了,具体编程还是很简单的 二.题目及分析 过河卒(NOIp2002) [问题描述] 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的 ...
- 你真的了解Spring Framework吗?
Java 框架 上世纪90年代,使用Java开发Web应用普遍使用J2EE标准,J2EE具有平台无关性,对事务.消息等企业级的特性都有很好的支持,但当时的J2EE仍存在一些问题: 非常复杂:EJB的诞 ...
- yii新手在实例化models(controller调用models实化化)php warning错误
新手在执照yii教程来的时候,config/main.php文件是全新写的,post提交的时候,会出错 include(LoginForm.php) [<a href='function.inc ...
- WPF操作RichTextBox
http://www.cnblogs.com/wzwyc/p/6291895.html
- English trip -- Phonics 5 元音字母 o
Vowel 元音 元音 O Consonant 辅音 清辅音 h wh 浊辅音 m wh n ng y oa:[əʊ] # 字母本身音 coat boat load co ...
- antd-pro1.0使用jest对react组件进行单元测试
前言 基于React+Ant Design(以下用Antd表示)的项目,在对于自己封装的,或者基于Antd封装的公共组件的自动化测试技术的选型和实践. 背景 随着前端项目越来越大,业务逻辑日益繁杂,协 ...
- thinkphp查询缓存
S()函数的使用: ThinkPHP把各种缓存方式都抽象成统一的缓存类来调用,而且ThinkPHP把所有的缓存机制统一成一个S方法来进行操作,所以在使用 不同的缓存方式的时候并不需要关注具体的缓存 ...
- MVC5 学习笔记 controller
主要参考书籍<ASP.NET MVC5 高级编程(第5版) > 作者:Jon Galloway等 1. MVC 表示 模型-视图-控制器.MVC是一种用于开发应用程序的模式,具备良好的架构 ...