1. 程式人生 > >matlab與C++混合程式設計 matlab釋出、打包DLL

matlab與C++混合程式設計 matlab釋出、打包DLL

本文主要講述將matlab編寫好的m函式匯出成dll,以供C++程式呼叫。使用matlab命令手動打包和matlab工具箱中deploytool的使用。寫本文的主要原因是,在專案過程中遇到一個棘手問題:專案使用了vlfeat庫,而vlfeat是c編寫的,只是提供matlab介面。那麼如可將專案中使用的庫一併打包,就成了一個問題,在多方查詢和各種嘗試之後,記錄下自己的經驗,以供遇到類似問題的人作參考。

一、使用matlab命令打包

這種方式打包,分三步走:
1:在matlab中選擇compiler。
在命令列視窗輸入:mex -setup

 Select a compiler: 
[1] Microsoft Visual C++ 2010 in D:\devtool\Microsoft Visual Studio 10.0 

[0] None 
%%這裡編譯器會列出系統已經安裝的編譯器,可以選擇適合的編譯器。

2:選擇builder.

輸入:mbuild -setup

    %%類似上一步

3:生成dll。

輸入:mcc -W cpplib:mydll -T link:lib test.m

上面的指令(從mcc指令集中其實也可以很容易查到這條指令的意思)中cpplib:mydll中的mydll是自己要儲存的dll,lib等檔案的檔名,link:lib test.m中的test.m是你的m函式的檔名。

二、使用圖形介面工具箱——deploytool

在命令列視窗輸入:deploytool,會彈出如下對話方塊:
這裡寫圖片描述
這裡可以設定打包專案的名字和匯出型別,這裡我們要打包成DLL,所以選擇C++ Shared Library。
選定之後會在matlab左側新增一個視窗:
這裡寫圖片描述


在上面的Exported Functions中,可以新增要匯出的m函式檔案,下方的Shared Resources …中則可以匯出專案中使用到的各種資原始檔,如,被呼叫的其它函式檔案、c/c++檔案各種lib或dll庫以及圖片等各種資源。這些將一起打包在生成的dll包中。這裡我們將程式中用到的vlfeat庫中的標頭檔案、lib和dll打包了進去(在這裡我將沒用的東西,如各種文件,精簡了一下,一來可以減少生成包的大小,二來也避免了不必要的錯誤,一開始我就遇到了有些多餘檔案在其中造成無法打包的情況)。
在Package選項卡中,可以檢視打包生成的檔案,已經增加和刪除檔案
這裡寫圖片描述
點選右上角第一個build按鈕
(第二個按鈕貌似可以生成自動解壓的exe檔案,下次嘗試一下^_^),如果順利,就可以完成打包啦!
這裡寫圖片描述
完成之後,就會在當前目錄下生成一個與打包專案同名的資料夾:
這裡寫圖片描述
其中distrib目錄下的.dll .h .lib就可以拿到C++程式中使用啦!

參考:

相關推薦

matlabC++混合程式設計 matlab釋出打包DLL

本文主要講述將matlab編寫好的m函式匯出成dll,以供C++程式呼叫。使用matlab命令手動打包和matlab工具箱中deploytool的使用。寫本文的主要原因是,在專案過程中遇到一個棘手問題:專案使用了vlfeat庫,而vlfeat是c編寫的,只是提供

一個基於COM元件的MatlabC#混合程式設計例項

把matlab與其他語言混合使用是一種挺實用的技巧,在前期使用matlab進行演算法設計和計算模擬,而在需要編寫程式原型的時候把matlab演算法模組嵌入到C++或C#的程式裡,一方面省的再用C++或C#重寫程式碼,另一方面也可以直接呼叫matlab裡的一些工具

matlabc++混合程式設計---matlab和vs的環境配置問題及方法和步驟(轉載)

matlab和c++混合程式設計---方法和步驟 matlab和c++混合程式設計---matlab和vs的環境配置問題 摘要:Matlab具有很強的數值計算和分析等能力,而C/C++是目前最為流行的高階程式設計語言,兩者互補結合的混合程式設計在科學研究和工程實踐中具有非常重要的意義。從Matlab呼叫C

MatlabC++混合MEX程式設計

一、mexFunction 與C中的main函式一樣,MEX程式中的開始函式為mexFunction.預設變數引數是: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[

MatlabJava混合程式設計的教程

許多方面我們用到了MATLAB的強大數學計算能力,也同時JAVA語言是現今使用最多的程式語言。現在的Android也同樣使用JAVA語言來實現。 下面我就如何進行混合程式設計做了一下步驟。 第一步:當然是安裝好MATLAB程式和JDK,我是用的MATLAB版本是R2013a, JDK是版

matlabc++混合程式設計---Mex結構和mexFunction引數傳遞

最近的專案需要matlab和C的混合程式設計,經過一番努力終於完成了專案要解決的問題。現在就將Mex的一些經驗總結一下,當然只是剛剛開始,以後隨著學習的深入繼續新增。首先講講寫Mex的一些常規規定,然後我們會重點關注混合程式設計中最難解決資料的問題--結構到底如何轉換

MatlabC++混合程式設計——在matlab除錯過程中可以跳入VS除錯觀察.cpp檔案中的資料

1.在matlab中為.cpp使用mex編譯生成.mexw64(64位)檔案 在matlab中封裝編譯函式: compile_gc(debug_flag) compile_gc(debug_flag=1):生成兩種檔案,(.mexw64和.mexw64.pdb) compi

matlabc++混合程式設計---方法和步驟

  摘要:Matlab具有很強的數值計算和分析等能力,而C/C++是目前最為流行的高階程式設計語言,兩者互補結合的混合程式設計在科學研究和工程實踐中具有非常重要的意義。從Matlab呼叫C/C++程式碼及C/C++呼叫m檔案兩方面,深入地研究了它們之間混合程式設計的原理和

MatlabVS混合程式設計總結

Matlab與VS混合程式設計有很多種方法,本人採用了自己認為最簡單的一種,即VS呼叫matlab生成的動態連結庫。現在將整個過程總結如下,方便以後翻閱,同時也造福像我一樣的菜鳥。 一、生成動態連結庫 建立matlab函式檔案,如:pca.m。用mcc編譯pca。因為ma

matlabvc混合程式設計,一個命令搞定

用matlab做的gui介面,雖說樣式也沒多美觀,好在簡單易操作,能馬上做完交報告,當然vc不會做介面實在沒啥可驕傲的。 用matlab寫的SARtotal.m,這是主程式,對應SARTota.fig,這是主介面,呼叫a.fig, b.fig ,c.fig三個子介面。在ma

matlab c++混合編碼 (matlab .m檔案轉為c++的dll檔案)

 以前做過matlab7與c++的混合程式設計:將m函式編譯成dll給C++呼叫,從而加快開發的進度。但是今天在matlab2008b下面又做了一遍,發現matlab又改了很多東西,諸如增加了面向物件的的擴充套件mwArray,於是做筆記如下。 (一) 總體概念 mat

QMLC++混合程式設計

文章參考: https://blog.csdn.net/foruok/article/details/32698603 http://blog.51cto.com/9291927/1975383 QT專案開發過程中,畫面上顯示的佈局以及對應的資料可能會動態變化,如果只用QML來構件簡單的

PythonC混合程式設計!是Python和C都不具備的超能力!

    編寫 c => python 的介面檔案 // vectory_py.c extern "C" { vector<point_t>* new_vector(){ return new vector<point_t>

如玫瑰一般的PHPC#混合程式設計

故事背景是這樣的,有一套專案,伺服器端是用C#寫的,為了完成某種事情,它需要使用到一個元件,這個元件很小但很重要,很不巧的是,這個這個元件是用PHP語言寫的,如果為了使用這個元件而專門搭建一個PHP的環境顯得有點高射炮打蚊子(況且還有其他不可預見的阻力)。或許有讀者會提出“抗議”:不是PHP寫的麼,直接看原始

Qt Quick 之 QML C++ 混合程式設計詳解

    Qt Quick 技術的引入,使得你能夠快速構建 UI ,具有動畫、各種絢麗效果的 UI 都不在話下。但它不是萬能的,也有很多侷限性,原來 Qt 的一些技術,比如低階的網路程式設計如 QTcpSocket ,多執行緒,又如 XML 文件處理類庫 QXmlStreamR

CC++混合程式設計問題:.C++呼叫.C檔案時出現:undefined reference to `xxxxx()'

本人使用qt的介面和opengl功能模擬演算法,該演算法需要在嵌入式中執行,因此需要用純C編寫,此時涉及到在C++寫的qt介面檔案中呼叫C檔案的庫函式,原先以為只需在C++中把C的.h檔案包含進去就可以正常使用,後來發現,使用這種方法時,在程式碼編寫時,C++檔案裡可以直接連

linux下CC++混合程式設計

首先,混合程式設計不是指在同一個檔案裡寫C與C++。 比如說想在同意檔案裡同時 弱型別檢查,又強型別檢查,那真夠嗆。 混合程式設計包括:1,C++引用C的標頭檔案;2,g++生成的.o與gcc生成的.o相連結。 1,在用C語言寫的標頭檔案中,經常加上如下 保護巨集定義

QMLC++混合程式設計(二):QML獲得C++類中的屬性

QML獲得C++類中的屬性   QML可以輕鬆地用C++中定義的功能進行擴充套件。由於QML引擎和Qt元物件系統的緊密結合,QML可以獲取任意QObject派生類中的功能,這使得QML可以通過一些小的改動直接獲得C++中的資料和方法。   QML引擎可以通過

彙編C混合程式設計(6.19)

一  異常放回 <1>IRQ/FIRQ pc <- lr - 4  <2>軟中斷異常pc <- lr  <3>預取指令終止異常 指令1指令2 <-沒有取到指令指令3指令4 <-pc lr : 儲存的是指令3的地址 

MatlabC混合程式設計Matlab呼叫C

類似Matlab的指令碼語言的最大詬病就是執行速度慢,而C的編寫難度大,但執行速度快,所以用Matlab呼叫C可以很好的互補。 用Matlab呼叫C語言如下,其中mexFunction是一個介面函式,