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
初次編輯,可能很啰嗦,主要日常看簡單的教程落下陰影了。