使用C/C++編寫核心算法,使用matlab調用算法、做上層封裝,通常是提升效率並提供易用性的一個不錯的選擇。
mex需要設定接駁的C/C++編譯器,官方文檔在這里:https://ww2.mathworks.cn/help/matlab/matlab_external/changing-default-compiler.html
簡要總結下:
Windows
在Windows下用Visual Studio作為C/C++編譯器,允許mex設定或切換在不同版本的VS:
mex -setup C++
Linux
我使用的是Ubuntu16.04。Ubuntu下的gcc版本通常比matlab的mex需要的gcc版本要高。比如ubuntu16.04的gcc默認是5.4版,但matlab2017b只能用gcc-4.9。
查閱文檔以及嘗試后總結為:
-
修改/path/to/matlab/bin/mexopt.sh里面的
CC
和CXX
變量的值,是沒有用的,即便重啟了matlab,mex仍然是調用系統PATH中的gcc和g++,而不是mexopt.sh中的CC和CXX -
PATH中的gcc和g++(也就是/usr/bin/gcc和/usr/bin/g++),是一個不好的選擇:因為它雖然解決了matlab中的mex編譯警告、錯誤,但是整個操作系統中的其他各種庫都有可能收到影響從而無法運行。
-
正確的解決方法是,使用mex命令時臨時設定GCC和G++版本,舉例:
mex GCC='/usr/bin/gcc-4.9' private/edgesDetectMex.cpp -outdir private