2016-03-02 68 views
0

我的總體目標是在我的MATLAB代碼中使用C模型。的C型是大(超過一打.c文件,它們是從cModel.c所有運行),並且可以成功編譯然後在終端通過大型C代碼沒有用MATLAB的mex編譯

make cModel 
cModel.x startingfile.inp 

運行的C模型是爲正常的C正確地建編譯器。

但是,MATLAB的mex函數沒有編譯這個C代碼。我是mex的總新手,我正在試着理解問題所在。

我想(並閱讀一些類似的問題,在stackoverflow支持這一點),該問題是圍繞創建一個mexFunction。我嘗試目前

/*function AA_mexWrapper.c*/ 
/*Include the MATLAB mex header*/ 
#include "mex.h" 

/* The gateway function */ 
void mexFunction() 
{ 
/* Main() of the C Model*/ 
cModel(); /* cModel writes files. We don't care about the nonexistant returned variables*/ 
} 

這會產生錯誤(使用MEX AA​​_mexWrapper cModel):

Error using mex 
/Users/Filepath/ cModel.c:215:5: warning: 
implicit declaration of function 'main' is invalid in C99 [-Wimplicit- function-declaration] 
main(int argc, char **argv); 
^ 
/Users/Filepath/ cModel.c:215:10: error: 
expected expression 
main(int argc, char **argv); 
    ^
1 warning and 1 error generated. 

什麼是MATLAB做什麼,如何解決呢?我真的只是需要它像對待普通的C編譯器那樣對待cModel.c。

PS。我不知道什麼(int argc,char ** argv)在C代碼中。它們完全未定義,大概它們來自包含模型非默認參數的文件名的可選用戶輸入。

PPS。我將需要在matlab中運行C模型,方法是將它指向包含各種模型選項的文本文件。我希望MATLAB可以解決這個問題,但我開始懷疑...

+2

使用正確的函數聲明。你使用的是自1989年以來過時的。 – Olaf

+0

@Olaf - 我沒有寫C模型不幸。他們有什麼問題? –

+2

如果您不打算將任何變量傳入或傳出來自MATLAB變量的mex函數,那麼使用mex編譯代碼就沒有意義了。只需使用「系統」以正常方式調用您的可執行文件即可。 – Peter

回答

2

您不能像調用函數一樣調用可執行文件;可執行文件的名稱未按照您的想法「導出」。

簡單的解決方案如何?在MATLAB之外建立你的可執行文件並要求MATLAB運行它;這裏有一段代碼,將做到這一點(假設cModel.x是在同一個文件夾中的腳本/函數調用它):

system('./cModel.x startingfile.inp'); 
+0

完美。 我可以使用它來獲得我需要的功能。感謝在我的方法中注意到這個問題 - 我不知道系統命令。 –