2014-04-15 214 views
1

我想在Matlab中構建一個包含m文件和C++(cpp)源文件的源代碼包。如何通過Matlab使用C++編譯器Mex編譯工具

源文件夾中有一個簡單的MATLAB腳本編寫一個文件夾中的所有cpp文件:

function compileDir_simple(Cdir) 
if nargin<1 
    Cdir=pwd; 
end 

files = dir(fullfile(Cdir,'*.cpp')); 

oldDir=pwd; 
cd(Cdir); 
for j=1:length(files) 
    try 
     cm = sprintf('mex -largeArrayDims %s',files(j).name); 
     disp(cm); 
     eval(cm); 
catch 
    disp(lasterr); 
    disp('IGNORE if the file is a C++ file which is not a mex file (ie without a  mexFunction inside)'); 
    end 
end 

cd(oldDir); 

內部,它採用 「MEX -largeArrayDims」。但是,我的問題是,當我評估該語句時,Matlab試圖通過MATLAB本身包含的C編譯器來構建所選文件。當我打電話MEX -SETUP我看到:

MEX -SETUP 請選擇您的編譯器來編譯外部接口(MEX)文件:

Would you like mex to locate installed compilers [y]/n? y 

Select a compiler: 
[1] Lcc-win32 C 2.4.1 in D:\MATLAB\R2010a\sys\lcc 

[0] None 

Compiler: 

我安裝流血C++編譯器並添加了它的bin文件夾(到Windows環境變量,但是我仍然看不到我的C++編譯器在已安裝的編譯器列表中,只有Lcc-win32出現,這是合適的,指出這是我第一次編譯mex文件。

+0

我不想安裝Visual Studio C++(更多下載時間+內存請求),並找到一種更簡單快捷的方式來編譯C++,唯一的其他C++編譯器是Windows C++。答案是正確的,它不是MATLAB支持的編譯器 – fercis

回答

2

Windows上的mex文件只是一個導出名爲mexFunction的函數的DLL。原則上,您可以使用任何可以創建Windows DLL的編譯器來編譯mex文件。

但是,要在MATLAB中使用mex函數,要求MATLAB知道您的編譯器。並且默認情況下,MATLAB只具有有限數量編譯器的知識。你選擇的編譯器不是其中之一。

流血是基於mingw。這意味着你應該能夠使用Gnumex項目來創建一個mexopts.bat文件以供你的編譯器使用。

但是,我會對在這裏使用流血衝突有點懷疑。它是一個C++ IDE,我不確定你特別需要這個。我懷疑你所尋找的只是一個編譯器。在這種情況下,您可能最好通過安裝簡單的mingw進行服務。

+0

正確!它也適用於Dev C++ – fercis

2

Bloodshed C++不是受支持的編譯器。查看http://www.mathworks.co.uk/support/compilers/R2014a/index.html獲取支持的編譯器列表。舊版本可從同一頁面獲得。

+0

mex文件只是DLL。幾乎任何Windows編譯器都可以構建一個mex文件。甚至不需要用C編寫。 –

+0

@DavidHeffernan那麼,如果你想在MATLAB中運行'mex'命令,你需要先運行'mex -setup',這需要一個支持的編譯器。 – am304

+0

這根本不是真的。你可以使用幾乎任何C編譯器和mex。例如:http://gnumex.sourceforge.net/documentation.html –