前言html
項目算法中包含了不一樣編譯工具的代碼,分別是matlab和VS,須要將兩者結合起來,統一在同一個系統工做,此時就要用到matlab和vs混合編程。ios
在matlab中將.m文件編譯生成庫文件等供外部的vs程序調用,實現混合編程。c++
實現步驟redis
1.matlab中算法代碼編譯生成庫文件、頭文件等;算法
2.建立並配置VS工程;編程
3.安裝配置MCR方便軟件移植;函數
實現環境工具
matlab版本:matlab2015a測試
vs版本:vs2013ui
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 -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; }
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
完
作本身該作的事情,作本身喜歡作的事情,安靜作一枚有思想的技術媛。