国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺析將matlab函數編譯成dll供Cpp調用的方法

開發 開發工具
這里將介紹如何通過將matlab函數編譯成dll供Cpp調用的方法,這里增加了面向對象的的擴展mwArray,希望本文能對大家有所幫助。

作者曾經實現過將matlab函數編譯成dll供Cpp調用,這篇文章的目的是對新增的面向對象的的擴展mwArray進行講解,matlab很容易和C/C++聯合起來使用。

以前做過matlab7與c++的混合編程:將matlab函數編譯成dll給C++調用,從而加快開發的進度。但是今天在matlab2008b下面又做了一遍,發現matlab又改了很多東西,諸如增加了面向對象的的擴展mwArray,于是做筆記如下。

(一) 總體概念

matlab提供了豐富的程序接口,除了matlab最初的版本是用fortran寫的之外,后來的版本都是用C寫的,因此matlab很容易和C/C++聯合起來使用。

matlab有著豐富的庫函數,將這些庫函數直接編譯成dll(windows下是dll,linux下是類似于dll的另外一個東西),給C調用,可以加快工程進度。

步驟如下:

1. 設置matlab的編譯器,使用外部的VC或者gcc等編譯器。

2. 編譯m文件成dll

3. 設置VC等的繼承環境,設置C需要用到的靜態庫和動態庫

4. 編寫C調用dll

下面以一個很簡單的加法函數為例,說明在VC6和matlab2008b下,怎么做混合編程

(二) 設置matlab編譯器

過程如下:

1. 在matlab的command window里面敲入mex –setup,matlab會列出所有電腦上所有的編譯器。

2. 選擇編譯器,這里選擇2,即VC6

設置matlab編譯器

3.完成之后,敲入mbuild –setup,選擇build工具,matlab會列出所有的build工具,同樣選擇VC6

選擇編譯器

(三) 編譯m文件

首先,寫出matlab函數,一個很簡單的加法函數,如下:

  1. function [c] = MyAdd(a, b);   
  2. c = a + b;  

保存為MyAdd.m

然后,進行編譯,命令如下:

mcc -W cpplib:libMyAdd -T link:lib MyAdd

其中,mcc是matlab提供的編譯命令(可以理解為gcc),對于這一點,matlab的幫助說明如下:

-W lib:string link:lib

其中-W是控制編譯之后的封裝格式,cpplib,是指編譯成C++的lib,cpplib冒號后面是指編譯的庫的名字,-T表示目標,link:lib表示要連接到一個庫文件的目標,目標的名字是后面的MyAdd,即你寫的m函數的名字。

運行完之后,你的目錄下面,將會出現以下一些文件:

libMyAdd.cpp

libMyAdd.exp

libMyAdd.dll

libMyAdd.exports

libMyAdd.h

libMyAdd.prj

libMyAdd_mcc_component_data.c

mccExcludedFiles.log

readme.txt

具體每一個文件的意思,請查幫助,這里只說其中很有用的幾個:

libMyAdd.dll是編譯好的動態庫,MyAdd這個函數封裝在里面,libMyAdd.h是對應的頭文件,在C里面調用這個函數的時候,需要include這個頭文件,在這個頭文件的***,你可以看到下面的內容:

extern LIB_libMyAdd_CPP_API void MW_CALL_CONV MyAdd(int nargout, mwArray& c

, const mwArray& a

, const mwArray& b);

這就是MyAdd的C函數的聲明。

nargout表示輸出變量的個數

a,b,c就是對應了m函數的幾個變量

注意,a,b,c三個變量的類型是mwArray,這是matlab提供的一個特殊的變量類型(在7.0的版本,編譯之后,變量類型是mxArray)。mwArray是一個類,具體可以查幫助,當然后面也會講到。

(四) 設置VC環境

有了上面的準備,需要設置VC環境,好讓lib和dll能被成功的調用。

1. 首先建立一個控制臺工程(這個我就不詳細講了,太easy了)

2. 然后,在tool-option-directory里面設置用到的lib和include頭文件的位置

首先是include頭文件的位置,看***一行(這個根據每一個人的安裝目錄可能不一樣,自己去找吧)

設置VC環境

然后是lib的位置,不盡包括matlab的靜態庫的位置,還包括剛剛編譯出來的lib的位置,見圖的后面兩個,不用我解釋吧

matlab的靜態庫的位置

你可以打開這兩個目錄,看看里面到底有哪些頭文件和lib,首先來講,我們這里要用到的頭文件包括:

#include "mclmcr.h"

#include "matrix.h"

#include "mclcppclass.h"

#include "libMyAdd.h"

lib包括

mclmcrrt.lib libmx.lib libmat.lib mclmcr.lib

你可以到具體的路徑下看一看,有沒有上面幾個lib和頭文件

路徑設好了,需要制定具體用到的lib了,在project Setting-link-Object/library modules里面加入上面提到的幾個lib(具體幾個lib到底做什么用的,這里不講了,看幫助,或者你試驗刪去幾個lib能不能工作,就大概可以猜得到他們是干什么的了)

clip_image009

3. 將編譯好的dll復制到VC工程的Debug或者Release目錄下,以使得dll可以被找到。

(五) 寫Cpp調用dll

所有任務完成之后,開始寫Cpp試驗調用編譯之后的函數了。

首先,包含應有的頭文件:

  1. #include "mclmcr.h"   
  2. #include "matrix.h"   
  3. #include "mclcppclass.h"   
  4. #include "libMyAdd.h"   
  5. #include   
  6. #include  

然后,寫main函數:

  1. int main(void)   
  2. {   
  3. double a = 6;   
  4. double b = 9;   
  5. double c;   
  6. // initialize lib,這里必須做初始化!   
  7. if( !libMyAddInitialize())   
  8. {   
  9. std::cout << "Could not initialize libMyAdd!" << std::endl;   
  10. return -1;   
  11. }   
  12. // 為變量分配內存空間,可以查幫助mwArray   
  13. mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩陣的大小(所有maltab只有一種變量,就是矩陣,為了和Cpp變量接軌,設置成1*1的矩陣,mxDOUBLE_CLASS表示變量的精度)   
  14. mwArray mwB(1, 1, mxDOUBLE_CLASS);   
  15. mwArray mwC(1, 1, mxDOUBLE_CLASS);   
  16. // set data,不用我解釋了吧,很簡單的,調用類里面的SetData函數給類賦值   
  17. mwA.SetData(&a, 1);   
  18. mwB.SetData(&b, 1);   
  19. // using my add,掉我自己寫的函數   
  20. MyAdd(1, mwC, mwA, mwB);   
  21. // get data,不用我解釋了吧,很簡單的,調用類里面的Get函數獲取取函數返回值   
  22. c = mwC.Get(1, 1);   
  23. printf("c is %f\n", c);   
  24. // 后面是一些終止調用的程序   
  25. // terminate the lib   
  26. libMyAddTerminate();   
  27. // terminate MCR   
  28. mclTerminateApplication();   
  29. return 0;   
  30. }  

運行結果如下:

運行結果

【編輯推薦】

  1. VC++與MATLAB混合編程及其應用
  2. C#創建、調用dll:冒泡排序
  3. 如何用Visual C#生成DLL文件
  4. 淺析Visual C#編寫DLL
  5. 簡單介紹C# DLL函數
責任編輯:彭凡 來源: 清華大學出版社
相關推薦

2021-08-18 08:00:00

Emscripten開發技術

2015-04-15 09:28:45

JavaScript熱門工具

2018-10-31 14:00:05

LispJavaScript編程語言

2009-12-16 10:15:58

VS2003編譯

2009-08-05 09:30:39

C#調用DLL函數

2009-08-05 09:40:02

C#調用DLL函數

2009-07-31 17:28:35

C#語言調用DLL

2021-05-18 14:25:30

Linux運維Linux系統

2019-05-24 16:20:11

Python 開發編程語言

2009-08-03 12:57:27

C#調用DLL

2023-07-27 07:29:44

.NetMSIL工具

2009-12-14 16:44:56

Ruby調用DLL

2009-08-14 15:07:00

C#編譯過程

2010-03-23 10:47:46

python代碼

2010-01-26 14:10:22

Visual C++

2009-07-03 13:22:37

調用Servlet

2009-11-30 09:27:38

VS2003源代碼

2009-08-07 17:22:36

C#調用dll導出函數

2011-06-28 13:12:07

Qt 調用 DLL DLL

2009-08-14 09:15:28

C#調用構造函數
點贊
收藏

51CTO技術棧公眾號

日韩欧美在线观看视频| 日韩欧美成人激情| 免费看成人片| 97se亚洲| 精品日韩欧美一区二区| 羞羞小视频在线观看| 免费看欧美美女黄的网站| 97在线观看视频| 成人性生交大片免费看网站 | 国产精品久久77777| av色在线观看| 狠狠躁天天躁日日躁欧美| 成人一区二区免费视频| 亚洲福利久久| 国产91热爆ts人妖在线| 日本一区二区三区中文字幕| 欧美精品粉嫩高潮一区二区| 波多野结衣在线中文| 成人涩涩免费视频| 欧美日韩综合久久| 国产精品videosex性欧美| 伦理中文字幕亚洲| 国产欧洲在线| 欧美日韩一区二区不卡| 黄色三级电影网| 国产精品麻豆欧美日韩ww| 欧美黑人又粗又大又爽免费| 久久免费国产精品| 999精品网站| 国产日产欧美一区| 五月天电影免费在线观看一区| av免费在线网站| 亚洲视频导航| 日韩国产一区二| 日本一区免费看| 日日夜夜精品免费视频| 欧美成人艳星乳罩| 亚洲欧洲精品在线观看| 蜜芽一区二区三区| 懂色av一区二区三区四区五区| 黄色资源网久久资源365| 日本大胆人体视频| av在线不卡观看免费观看| 俄罗斯av网站| 亚洲欧美综合另类在线卡通| 国产福利a级| 午夜成人免费视频| 91短视频版在线观看www免费| 精品视频一区三区九区| 污污视频在线| 国产一区二区成人| 999国产精品一区| 国产精品丝袜久久久久久不卡| 综合天天久久| 亚洲v日韩v欧美v综合| 国产剧情一区二区| jizz大全欧美jizzcom| 亚洲精品成a人| 91青青在线视频| 日韩精品在线观看一区| 亚洲一区二区电影| 成人xxxx视频| 丝袜国产日韩另类美女| 黄色一级视频在线播放| 国产精品三级av| 阿v免费在线观看| 亚洲美女视频网| 日本妇女一区| 快播亚洲色图| 国产午夜一区二区三区| 黄色免费在线播放| 亚洲欧美日韩直播| 国产成人短视频在线观看| 波多野结衣一区二区三区在线观看| 日韩国产在线观看一区| 国产精品视频分类| 欧美性受极品xxxx喷水| 丁香久久综合| 亚洲一区二区三区四区在线播放 | 欧美电影一区二区| 日本久久二区| dy888夜精品国产专区| 成人av第一页| 黄色片视频在线观看| 亚洲性av在线| 91精品91| 北条麻妃在线一区| 欧美日韩黄色一区二区| 日本在线视频一区二区三区| 日本黄网免费一区二区精品| 亚洲啪啪综合av一区二区三区| av日韩亚洲| 精品国产一区二区三区麻豆小说 | 极品束缚调教一区二区网站| 欧美日韩无遮挡| 亚洲欧美国产三级| 韩日精品一区二区| 国产美女精品久久久| 中文字幕日韩一区二区| 日韩三区在线| 九色综合婷婷综合| 亚洲图片一区二区| 国产精品视频一区二区三区| 久久99精品久久久久久久青青日本 | 99re热视频在线| 精品亚洲一区二区三区四区五区| 天天做天天爱天天综合网| 久久久精品在线视频| 欧美变态凌虐bdsm| 亚洲免费观看| 日本二区视频| 韩剧1988免费观看全集| www.亚洲精品| 欧美日韩在线观看首页| 91久久久一线二线三线品牌| 国产精品久久久久久久久免费桃花 | 久久久精品影视| www.色在线| 国产原创精品| 色噜噜偷拍精品综合在线| 欧美日韩有码| 久久这里只精品| 欧美夫妻性生活视频| 99视频精品免费视频| 日本欧美韩国| 欧美视频免费看欧美视频| 亚洲欧美精品在线| 欧美aⅴ一区二区三区视频| 少女频道在线观看高清| 日韩精品久久久| 欧美优质美女网站| 午夜亚洲福利| wwwww在线观看免费视频| 99视频国产精品免费观看| 色婷婷亚洲婷婷| 午夜电影亚洲| 国产免费av在线| 国产精品视频500部| 欧美视频中文一区二区三区在线观看| 99精品美女| 美女做暖暖视频免费在线观看全部网址91| 国产噜噜噜噜久久久久久久久| 性欧美大战久久久久久久久| 日韩大片在线播放| 日本护士...精品国| 国产chinese精品一区二区| 欧美亚洲高清一区| 日本视频一区二区| 交100部在线观看| 日本一级黄视频| 久久久av一区| 一区二区三区四区国产精品| 欧美xxx在线观看| av免费网站在线| av在线观看地址| 午夜精品久久久久久久99热| 午夜久久久久久| 午夜在线精品| 国产一区二区三区四区五区3d| 青青青免费在线| 欧美一级片在线播放| 天天色图综合网| 视频在线观看91| 粉嫩91精品久久久久久久99蜜桃| 少妇性l交大片| 成人午夜激情免费视频| 日韩免费高清视频| 99久久国产综合色|国产精品| 欧美挤奶吃奶水xxxxx| 国产免费av高清在线| 日本道在线视频| 亚洲91av视频| 欧美日韩在线免费视频| 国产一区二区三区四区五区美女| 给我免费播放日韩视频| 国产特黄在线| 在线播放 亚洲| 456亚洲影院| 日韩精品在线看片z| 国产欧美中文在线| 最新日韩在线| 亚洲日本视频在线| 宅男宅女性影片资源在线1| 一级日韩一区在线观看| 992tv在线成人免费观看| 制服丝袜在线91| 国产午夜亚洲精品羞羞网站| 亚洲网站啪啪| 9999在线精品视频| 在线看av的网址| 狠狠躁狠狠躁视频专区| 久久爱av电影| 992tv成人免费视频| 日韩一级免费观看| 中文字幕在线播放不卡一区| 一区二区三区国产在线| 日韩欧美激情电影| jizz一区二区三区| 女同互忝互慰dv毛片观看| 红桃一区二区三区|