首先必須知道聯合編程需要知道的一些命令解釋:
mcc 的作用是將 .m文件編譯為 c/c++動態鏈接庫文件,使你可以在 c/c++程序中使用 matlab的一些函數功能。mcc 也可以將.m文件編譯為exe可執行文件。
mex 的作用是將 c/cpp文件編譯為 .m 文件可以調用的庫文件,在Windows操作系統里通常是以mexw32或mexw64為擴展名,讓你可以使用 c/c++來擴展 matlab,即在matlab中調用C/C++編寫函數的功能,達到增加新的功能或者加速原有程序的功能。
mbuild 的作用是將 matlab視為一個 c/c++編譯器,使用mbuild可以將 c/c++編譯為 exe可執行文件,特色在於可以調用 matlab的數學庫和圖形庫,但這樣需要使用 matlab提供的動態連接庫才能運行。
--------------------------------------分割線-----------------------華麗轉身-------------------------------
在做matlab和C#混合編程時要對系統進行設置。比如我要用deploytool生成c++的動態鏈接庫(下面有圖),必須先要運行mbuild -setup命令。
但是有時會出現找不到vs的情形。例如:
>>mbuild -setup
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2008a\sys\lcc
[0] None
Compiler:
同樣的事情也可能出現在mex -setup命令上。
>>mex -setup
Please choose your compiler for building external interface (MEX) files:
Would you like mex to locate installed compilers [y]/n? y
Select a compiler:
[1] Lcc-win32 C 2.4.1 in E:\PROGRA~1\MATLAB\R2008a\sys\lcc\bin
[0] None
Compiler:
如上,可能我們即使在機子上安裝了vs,將仍然找不到它。
原因在於,在用mex配置c++編譯器時,mex首先檢查系統是否安裝了vs ,然后再檢查版本是否正確。具體方法是:調用vs安裝目錄下的/VC/bin/c1.exe.它會輸出一堆字符,然后在其中查看是否有“Version 版本號”,如果有就判斷版本正確,否則就會出現上面的情形。而我們大部分都是安裝的中文版,在中文版中,調用c1.exe后輸出的相應字符是“版本號+版 ”,例如:“用於 80x86 的 Microsoft (R) 32 位 C/C++ 優化編譯器 14.00.50727.762 版”
顯然沒有“Version 版本號”出現。
解決方法是:(1)安裝vs2008英文版,使用此方法即可以解決問題;
(2)下載附件mexsetup,解壓到matlab安裝目錄下的bin文件夾中;
附件請移步到我的微盤:http://vdisk.weibo.com/s/lF3Og
這種方法我試過,確實,使用mex -setup命令的時候它起作用了,但是mbuild -setup依舊有問題。
后來試了下同事的電腦,發現不用做任何配置,以上命令都沒有任何問題。他的電腦是vs2010+matlab2009b,我的是vs2008+vs2010+matlab2012a,都是xp系統。
所以還是建議重裝軟件比較實在。
---------------------------------我又來了-----------------------------------------------------------------------
但是我其實是很不願意重裝系統的,看到deploytool里面有直接生成exe文件,決定試下。如上圖第一個選項。
竟然什么都不用配置,生成工程后直接編譯通過(可參考我之前的文章)。生成的distrib文件夾里面只有兩個文件,但是如果不是在本機上運行,額外加裝matlabmcr是必須的。
后面的工作就很簡單了,新建個c++工程,把生成的fall.exe加到工程里,寫上:
#include <windows.h>
int main()
{
system("fall.exe");
}
一次性運行通過。