matlab vs 打包exe文件路径,Matlab中調用VS編譯的exe文件並傳遞變量 的方法

經歷::在網上找了很多方法,都沒有實現在matlab中調用vs的exe文件並且能夠傳遞變量參數,一些小細節花費了自己很多時間,比喻忽略了一些空格!  網上很多的方法都是純粹復制別人的方法,自己都沒有去驗證,所以在網上找答案時花了大量時間去看了一些重復而且並不正確的方法;

啟示::在參考別人的方法時,一定要有自己的思考,上網搜答案一定要有選擇性,最好找到一種權威、可信度比較高的機構寫的方法,自己認真去驗證一次,不行就放棄,不要反復去看一些重復的方法,兜着繞圈子,浪費大量時間!!!

問題解決:

在matlab中有多種命令來調用外部程序編譯的exe文件:

1. 調用外部程序的命令

在matlab中執行一條外部系統命令的方法(不僅僅是Unix系的,windows也是一樣的):

! command

比如說linux下

! ls

! mkdir test

更好的使用方法(這個方法也是適用於windows的):

system('command')

[status, results]=system('command')

[status, results]=system('command','-echo')

第一個直接在命令窗口中顯示運行中的提示

第二個如果調用成功,status會返回0,如果失敗返回其它值,在命令窗口是沒有輸出的,但是所有字符保存在results中

第三個和第二個一樣,只是還強制在命令窗口中顯示運行信息。

這個方法之所以更好,還有一個原因就是可以給命令傳遞字符變量。(調用system()可以傳遞字符變量,而用!command不能傳遞變量,只能傳遞常量);

舉例說明system()調用exe文件:

1>、test.cpp文件

#include "stdafx.h"

#include

#include

using namespace std;

/*char* r[] 字符指針數組 接受傳遞來的字符串,其中r[0]指針往往存儲程序自身的名稱,比喻:"test.exe",其它字符參數(程序中要用的參數)依次存儲在r[1]  、r[2]......中*/

int main(int argc, char* r[])

{

char q=*r[1];

int  a=1;

int  b=2;

int  c=a+b;

cout<

return 0;

}

2>、test.exe文件

將test.cpp在vs中編譯運行,生成test.exe文件;

3>、test.m文件 (在matlab中編寫簡單的test.m文件)

clear

clc

sym x;   //定義一個變量x,不用定義這一步也可以

x='w';

cmd=['path\test.exe' ' ' x]; //千萬千萬注意空格['path\test.exe' ' ' x];  譯為 [‘path\test.exe'空格‘空格’空格x] ; 少一個空格都會出錯

system(cmd,'-echo');         // 也可以這樣寫[status, result]=system(cmd,'-echo'); status用來存儲程序調用的狀態,成功調用為0,否則為1;result用來存儲執行的結果;

//system(['path\test.exe' ' ' x],'-echo'); 直接將cmd的值放在system()中也是一樣的;

在matlab中運行test.m文件,就會調用test.exe 文件,並且將變量x的值'w'傳遞給text.exe, 在test.cpp中*r[1]的值就為w, 運行后在matlab的command windows中顯示運行結果:3w; 至此,調用結束;

注意:test.exe文件路徑名稱 path中,不能帶空格,否則matlab不能識別路徑!!!!

2、如何將matlab的.m文件編譯成.exe文件(在matlab2010b上實現的)

1>、在matlab中新建一個function文件,編寫你所需要實現的函數文件保存為function.m,文件名稱最好與函數名一致;

2>、在matlab的 command windows中輸入: mcc  -m  function   按下回車鍵運行,運行結束就會生成function.exe文件

3、 系統路徑(環境變量)

用getenv('PATH')命令可以獲得當前的“系統路徑”(可執行文件的搜索路徑)。

在matlab中可以這樣增加系統路徑(本次matlab會話有效,重啟失效):

path1 = getenv('PATH')         %獲得系統路徑的字符串path1 = [path1 ':/usr/local/bin']   %字符串中加入自己要的路徑setenv('PATH', path1)                %設置系統路徑!echo $PATH                              %輸出以查看之

要想每次使用matlab都有效,可以在matlab的啟動腳本matlabroot/toolbox/local/startuprc.m中加入上面的代碼。

當然你也可以自己在shell中改整個系統路徑的PATH嘍。

if isunix

unix(['epstopdf ',filename,'.eps']);              % 如果是 linux 系統的話,將 eps 圖像轉換為 pdf 圖像

end

另外,執行系統命令時可能遇到Matlab自帶的庫不兼容外部程序的情況:

比如:$MARLAB/version/sys/os/glnx86/libgfortran.so.3: version `GFORTRAN 1.4' not found (required by exe_filename)

解決辦法就是把系統的庫鏈接過去:sudo ln -sf /usr/lib/i386-linux-gnu/libgfortran.so.3.0.0 $MATLAB/sys/os/glnx86/libgfortran.so.3

(參考:http://judsonsnotes.com/notes/index.php?option=com_content&view=article&id=611:matlab-running-external-programs&catid=57:programming&Itemid=81)

參考英文資料:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值