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

Posted

技术标签:

【中文标题】IntelliSense 错误标识符“emlrtStack”未定义【英文标题】:IntelliSense error identifier "emlrtStack" is undefined 【发布时间】:2014-09-23 16:46:10 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于IntelliSense 错误标识符“emlrtStack”未定义的主要内容,如果未能解决你的问题,请参考以下文章

预编译标头 IntelliSense 错误

为啥我会收到 IntelliSense 错误,如何修复或隐藏它们?

Microsoft Visual Studio 2012 RC C++ IntelliSense 错误

LNK2019 错误,但 Intellisense 工作正常

Intellisense 在 VSCode 中不起作用 - OmniSharp 错误

用于数据绑定的 IntelliSense 不起作用