mex 文件:编译失败并带有“//”注释;但是在使用“/* */”时编译得很好[重复]

Posted

技术标签:

【中文标题】mex 文件:编译失败并带有“//”注释;但是在使用“/* */”时编译得很好[重复]【英文标题】:mex file: compilation fails with with "//" comment; but compiles fine when used "/* */" [duplicate] 【发布时间】:2015-01-27 16:35:13 【问题描述】:

我正在编写一个将 C 代码链接到 matlab 的 mex 文件。

这是我的简单 mex 文件,它什么也不做,编译得很好。

#include "mex.h"

#ifndef N
#define N 100
#endif

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

    /*validate input/output arguments */


但是如果我改变评论,像这样:

#include "mex.h"

#ifndef N
#define N 100
#endif

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

    //validate input/output arguments


然后我收到以下错误:

>> mex mexcallingmatlab.c
Building with 'gcc'.
Warning: You are using gcc version '4.8.2'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently supported
compilers see: http://www.mathworks.com/support/compilers/current_release. 
Warning: You are using gcc version '4.8.2-19ubuntu1)'. The version of gcc is not supported. The version currently supported with MEX is '4.7.x'. For a list of currently
supported compilers see: http://www.mathworks.com/support/compilers/current_release. 
Error using mex
/home/dkumar/Mex_Codes_DKU/Mex_C_Codes_DKU2/mexcallingmatlab.c: In function ‘mexFunction’:
/home/dkumar/Mex_Codes_DKU/Mex_C_Codes_DKU2/mexcallingmatlab.c:9:5: error: expected expression before ‘/’ token
     // validate input/output arguments */

     ^

另外,如果我将其中一个文件保存为 C++ 文件,那么无论我使用 // 还是 /* .... */.

有人能告诉我为什么“//”不能用于评论吗?

【问题讨论】:

也在here 和here 中回答。 (是的,自我推销,但关键是有很多答案可以帮助解决这个问题)。 【参考方案1】:

有回复here。

特别是,

在 Linux 下,默认情况下,mex 添加 -ansi,它会禁用 C++ cmets。

【讨论】:

如果您发现重复,请留下评论链接,以便问题可以转化为重定向,而不是添加重复的答案。 @Chistakovitch 感谢您重定向到原始问题。以下命令工作正常: mex -g -largeArrayDims -ldl CFLAGS="\$CFLAGS -std=c99" mexcallingmatlab.c 你能解释一下“-largeArrayDims”在这里做什么吗? @GarimaSingh 这与你无关。这是问题作者使用的论点。你唯一感兴趣的部分是CFLAGS="\$CFLAGS -std=c99"。 :)【参考方案2】:

可能 Matlab 使用不启用 C99 功能的 gcc 参数调用 C 编译器。由于 C++ 风格的 cmets 在 C99 之前不是 C 标准的一部分—— gcc 会发出错误。

您可以在运行mex 时显式设置CFLAGS 以添加-std=c99。这应该使您能够使用 C++ 样式的 cmets(和其他功能)。

【讨论】:

以上是关于mex 文件:编译失败并带有“//”注释;但是在使用“/* */”时编译得很好[重复]的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

如何通过 Eclipse 编码和编译 Matlab mex 文件?

Octave:可以编译 mex,但出现错误:“无法安装 .mex 文件功能”

当 Row 接受可变参数时,为啥 Scala 编译器会失败并显示“此处不允许 ': _*' 注释”?

无效的 mex 文件错误(libstd++ 版本)

使用 mex 在 Matlab 中编译 C++ 失败