2014-09-23 75 views
0

我正在通過「Matlab編碼器」將MATLAB編寫的函數轉換爲C語言。獲得轉換後的文件後,轉換後的函數始終有第一個輸入參數,如const emlrtStack *sp。現在,當我試圖在VC++ 2013上測試它時,IntelliSense給出了上面提到的錯誤。智能感知錯誤標識符「emlrtStack」未定義

我手動嘗試在emlrt.h文件中找到此標識符,但在那裏沒有這種東西。我試圖簡單乘法函數轉換具有兩個輸入參數[等,C = MUL(A,B)]但仍然將轉換函數具有除了在函數內部此額外參數一個b。 (這意味着這個參數不是函數特定的)。

如果有人有解決這個問題或遇到類似問題,請分享或幫助。

此外如果有人知道如何簡單地測試這些轉換函數,這將是一個非常感謝的額外的幫助。

回答

1

很可能是爲MEX函數生成的代碼而不是獨立目標。 MEX函數是C,C++或Fortran編寫的二進制文件,可以像普通的MATLAB函數一樣調用。生成代碼以生成MEX函數允許兩件事。首先,您可以在MATLAB中測試您生成的代碼,因爲您可以像使用其他函數一樣從MATLAB調用MEX函數。在完成代碼生成並嘗試調用它之後,請查找名爲mul_mex.mex*的文件:mul_mex(1,2)。生成MEX函數的另一個用途是它通常比生成MEX函數的MATLAB代碼更快。 MEX函數僅用於MATLAB的上下文中。

您看到的參數emlrtStack*出現在MEX生成的代碼中以幫助運行時錯誤報告。它不在獨立代碼中,它被設計爲在MATLAB之外運行。

如果您想在Visual Studio中使用生成的代碼,或者在MATLAB之外使用,您應該選擇獨立的目標之一LIB,DLL或EXE。 This page顯示如何更改輸出類型。總之,如果使用命令行,你可以說:

cfg = coder.config('lib'); %or 'dll' or 'exe' 
codegen mul -config cfg -args {1,2} 

如果使用項目界面,單擊該選項卡Build並選擇靜態庫或共享庫中的「輸出類型」下拉菜單。

我會推薦閱讀this example,演示如何在Visual Studio中使用生成的DLL。