IntelliSense错误标识符“emlrtStack”未定义

时间:2014-09-23 16:46:11

标签: c++ matlab visual-c++ matlab-coder

我正在通过" Matlab编码器"将MATLAB编写的函数转换为C.获得转换后的文件后,转换后的函数始终具有第一个输入参数const emlrtStack *sp。现在,当我尝试在VC ++ 2013上测试它时,IntelliSense会给出上面提到的错误。

我手动尝试在emlrt.h文件中找到此标识符,但那里没有这样的东西。我试图用两个输入参数转换一个简单的乘法函数[比如, c = mul(a,b) ]但是转换后的函数在函数内部还有这个额外的参数除了 a b 之外。 (这意味着这个参数不是特定于功能的)。

如果某人有解决方法或遇到过此类问题,请分享或帮助。

此外,如果有人知道如何简单地测试这些转换后的功能,那将是一个非常受欢迎的额外帮助。

1 个答案:

答案 0 :(得分:1)

可能是为MEX函数而不是独立目标生成的代码。 MEX函数是用C,C ++或Fortran编写的二进制文件,可以像普通的MATLAB函数一样调用。生成代码以生成MEX函数允许两件事。首先,您可以在MATLAB中测试生成的代码,因为您可以像使用任何其他函数一样从MATLAB调用MEX函数。在生成代码并尝试调用它之后,查找名为mul_mex.mex*的文件:mul_mex(1,2)。生成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。