2014-09-23 123 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。