我正在通过“ Matlab编码器”将MATLAB编写的函数转换为C。获取转换后的文件后,转换后的函数始终将第一个输入参数设为const emlrtStack *sp。现在,当我尝试在VC ++ 2013上对其进行测试时,IntelliSense给出了上述错误。

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

如果有人对此有解决方案或遇到类似问题,请分享或帮助。

此外,如果有人知道如何简单地测试这些转换后的函数,那将是非常感谢的附加帮助。

最佳答案

可能是为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。

关于c++ - IntelliSense错误标识符“emlrtStack”未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26000459/

10-12 18:11