1. 程式人生 > >MATLAB/C語言混編的第一步,在MATLAB R2017b中生成mex檔案

MATLAB/C語言混編的第一步,在MATLAB R2017b中生成mex檔案

Matlab在科學計算方面的優越性使其成為科研人員的必備軟體之一,搭載了大量複雜工具箱,日益優雅的程式碼編輯器讓MATLAB R2017b徹底替代了之前的先輩版本。然而MATLAB畢竟是一個商業化的數學軟體,在大型演算法的編寫和執行上都存在諸多缺點。因此一些大神們更喜歡用C/C++編寫一些工具程式,比如libsvm, Matcont中的LimitCycle庫。不過大神之所以稱為大神在於他們不光有著驚人的天賦還設身處地的為我這種小白的方便著想,因此為這些程式加入了可以在Matlab編譯的介面函式,也就是所謂的C/MATLAB混編。說多了小重也不懂,只記得當年本科國創的時候用過一次C#/Matlab混編,不過和上面講的是反過來的,當時是有個師兄在Matlab上寫的演算法我不想在C#中重寫於是將其編譯成了C#可以直接呼叫的dll檔案。但是市面上將MATLAB和其他語言婚變的書籍層出不窮,有需要的小夥伴可以直接買一本敲幾個demos應該就入門了。

       言歸正傳,小重今天只想講講這混編的第一步,就是為Matlab配置C/C++編譯的環境。說白了就是想做這麼每一件事,把大神編寫好的c/c++檔案編譯成MATLAB可以直接用的mex檔案。其實這類教程很多,之所以寫的原因在於這個過程是depends on the version of MATLAB and operation system的。本重今天只針對沒有自帶C編譯器的Win64位系統,MATLAB 2017b,步驟如下

Step1. 開啟Matlab,在command面板輸入mex -setup。

>> mex -setup
錯誤使用 mex未找到支援的編譯器或 SDK

。您可以安裝免費提供的 MinGW-w64 C/C++ 編譯器;請參閱安裝 MinGW-w64 編譯器。有關更多選項,請訪問
http://www.mathworks.com/support/compilers
如果出現上面的錯誤,說明這是一個一塵不染的很正常的MATLAB2017b 和Win64系統。

Step 2. 作為一個自幼聽話懂事的寶寶,當然是根據錯誤提示滑鼠左鍵點選安裝 MinGW-w64 編譯器咯。然而你會發現出現一個滿是英文的幫助頁面,翻譯一下意思就是:“關了這個廢話很多的幫助!”。

Step 3. 點選Matlab主頁的附件功能按鈕,在彈出來的附加功能資源管理器頁面搜尋MinGW-w64 C/C++ Compiler

,然後安裝搜到的這個小程式,安裝過程乖乖地聽從Matlab的旨意,不要改路徑,"Come on, 沒佔多大的空間的。"溫馨提示:這個安裝過程可能很慢,可能進行不下去,是由於網路和原檔案網址不穩定造成的,實在不行聽幾個小時再安裝,不過最終是會OK的。

Step 4. 安裝好了以後,在command面板輸入mex -setup(這下應該大功告成了吧)。不出意外地話會看到和Step 1相同的錯誤,這是因為沒有設定環境變數的。

Step 5. 在command面板鍵入

>>setenv('MW_MINGW64_LOC',path)

path是MinGW-w64安裝的路徑,神奇的是整個安裝過程中壓根就沒有提示安裝路徑,通過全盤搜尋,最後發現路徑

path = 'C:\ProgramData\MATLAB\SupportPackages\R2017b\3P.instrset\mingw_w64.instrset'

去電腦上這個路徑看看,如果沒有這個路徑的話,建議全盤搜一下mingw_w64確定安裝路徑。

Step 6. 在command面板輸入mex -setup。

>> mex -setup
MEX配置為使用 'MinGW64 Compiler (C)' 以進行 C 語言編譯。
警告: MATLAB C 和 Fortran API 已更改,現可支援
        包含 2^32-1 個以上元素的 MATLAB 變數。您需要
        更新程式碼以利用新的 API。
     …
要選擇不同的語言,請從以下選項中選擇一種命令:
 mex -setup C++  mex -setupFORTRAN

你知道點哪個的:)。

Step 7. 大功告成,現在我們可以用Matlab 2017b生成mex檔案了。參考這個PPT裡面第5頁測試一下,結果當然是好用了。

https://wenku.baidu.com/view/c9b7c0528762caaedc33d411.html

初次編輯,可能很囉嗦,主要日常看簡單的教程落下陰影了。