前言

项目算法中包含了不同编译工具的代码,分别是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函数);

  1. function [sum, prod] = sum_prod(p1, p2)
  2. sum = p1+p2;
  3. prod = p1.*p2;
  4. 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工程,新建源文件作为测试;

  1. #include <iostream>
  2. #include "sum_prod.h"
  3. #include "mclmcrrt.h"
  4. #include "mclcppclass.h"
  5.  
  6. #pragma comment(lib,"mclmcrrt.lib")
  7. #pragma comment(lib,"sum_prod.lib")
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13. if (!sum_prodInitialize()) //必须写
  14. {
  15. //cout << "初始化失败!" << endl;
  16. return -;
  17. }
  18. double p[][] = { , , , };
  19. mwArray X(, , mxDOUBLE_CLASS);
  20. mwArray Y(, , mxDOUBLE_CLASS);
  21. mwArray SUM(, , mxDOUBLE_CLASS);
  22. mwArray PROD(, , mxDOUBLE_CLASS);
  23. for (int i = ; i < ; i++)
  24. {
  25. for (int j = ; j < ; j++)
  26. {
  27. X(i + , j + ) = p[i][j];
  28. Y(i + , j + ) = p[i][j];
  29. }
  30. }
  31. sum_prod(, SUM, PROD, X, Y);
  32.  
  33. double sum[][], prod[][];
  34. for (int i = ; i < ; i++)
  35. {
  36. for (int j = ; j < ; j++)
  37. {
  38. sum[i][j] = SUM(i + , j + );
  39. prod[i][j] = PROD(i + , j + );
  40. }
  41. }
  42. for (int i = ; i < ; i++)
  43. {
  44. for (int j = ; j < ; j++)
  45. {
  46. cout << sum[i][j];
  47. }
  48. cout << endl;
  49. }
  50. cout << endl;
  51. for (int i = ; i < ; i++)
  52. {
  53. for (int j = ; j < ; j++)
  54. {
  55. cout << prod[i][j];
  56. }
  57. cout << endl;
  58. }
  59. cout << endl;
  60. system("pause");
  61. return ;
  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;

(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移植的更多相关文章

  1. matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)

    matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...

  2. [转] Matlab与C++混合编程,添加OpenCV库

    原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...

  3. Matlab与C++混合编程,添加OpenCV库

    最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍受.软件立刻移植到C++上又不太实际,故采用联合编程的方式,速度难 ...

  4. Matlab与C++混合编程 1--在C++中调用自己写的matlab函数

    在Visual Studio中使用C++中调用MATLAB程序 在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目 ...

  5. 【目录】Matlab和C#混合编程文章目录

    本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...

  6. 算法库:Matlab与C++混合编程

    算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...

  7. Matlab与.NET混合编程解决人脸识别问题

    原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...

  8. Matlab与C++混合编程(依赖OpenCV)

    Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...

  9. [转] Matlab与C++混合编程(依赖OpenCV)

    作者 zouxy09@qq.com,原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的M ...

随机推荐

  1. Jmeter 抓app包 抓到一半不好用了

    错误描述: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl ...

  2. Python day21模块介绍4(logging模块,configparser模块)

    1.日志等级从上往下依次降低 logging.basicConfig(#日志报错打印的基础配置 level=logging.DEBUG, filename="logger.log" ...

  3. Qt5_加载DLL

    1.QLibrary 加载普通 DLL //写清楚库的路径,如果放在当前工程的目录下,路径为./Oracle.so QLibrary *libOCI = new QLibrary("F:\\ ...

  4. [STL][C++]STACK QUEUE

    参考:http://www.cnblogs.com/mfryf/archive/2012/08/09/2629992.html stackstack 模板类的定义在<stack>头文件中. ...

  5. ubuntu 安装 openssh-server,xinetd,vmware tools

    ●安装SSH服务 ●判断是否安装ssh服务,通过如下命令:ps -e|grep ssh 1, sudo apt-get update --->软件的更新地址变了,需要更新本机的sources.l ...

  6. English trip -- Phonics 3 元音字母e

    xu言: 额...今天给我上自然拼读的maple老师 - . -和上次给我上第二集自然拼读的是同一个老师.突然考了考我上次学的内容~感觉大脑一片空白.看来review不能光说而不下苦功夫啊... 元音 ...

  7. (GoRails) Form对象设计风格: 用自建的Model来对参数进行操作。

    视频:https://gorails.com/episodes/form-objects-design-pattern?autoplay=1 git代码 :https://github.com/gor ...

  8. Clear The Matrix CodeForces - 903F (状压)

    大意: 给定4行的棋盘以及4种大小的正方形方块, 每种各有一定花费, 每次可以选一种方块放在棋盘上, 棋盘对应格子全变为'.', 求最少花费使得棋盘全部变成'.' 状压基本操作练习, 状态取12位, ...

  9. bfs,dfs区别

    一般来说用DFS解决的问题都可以用BFS来解决. DFS(深搜的同时考虑回溯) bfs=队列,入队列,出队列:dfs=栈,压栈,出栈 bfs是按一层一层来访问的,所以适合有目标求最短路的步数,你想想层 ...

  10. Xshell如何设置,当连接断开时保留Session,保留原文字

    Xshell [1]  是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.Xshell 通过互联网到远程主机的安全连接以及它 ...