在Linux中编译C代码时,Mex会生成错误

时间:2013-07-31 17:51:20

标签: c gcc mex

我想使用配置了gcc的mex在ubuntu中编译C代码。我可以在OSX中顺利编译代码。但是,当我想在Linux中编译它时,编译器会在以//开头的注释行上生成错误(它与/* */一起正常工作。由于该程序包含来自第三方库的多个头文件,我无法用//替换/* */。 我想知道是否有办法解决这个问题。

MATLAB版本:R2012b Linux中的gcc版本:4.7.2 OSX中的gcc版本:4.2.1

感谢任何帮助

编辑: 这是我用来编译代码的命令:

mex -g -largeArrayDims -ldl TDSVDHNGateway.c

以下是mex生成的错误:

In file included from TDSVDHNGateway.c:2:0:
TDS.h:17:1: error: expected identifier or ‘(’ before ‘/’ token
TDS.h:26:2: error: unknown type name ‘index_t’
TDS.h:27:2: error: unknown type name ‘index_t’
In file included from TDSVDHNGateway.c:2:0:
TDS.h:146:3: error: unknown type name ‘index_t’
TDSVDHNGateway.c:37:3: error: unknown type name ‘index_t’
TDSVDHNGateway.c: In function ‘mexFunction’:
TDSVDHNGateway.c:166:25: error: ‘index_t’ undeclared (first use in this function)
TDSVDHNGateway.c:166:25: note: each undeclared identifier is reported only once for each function it appears in

头文件中的第17行是:

//Defining index_t
typedef size_t index_t;

如果我用//Defining index_t替换/*Defining index_t*/,代码将被编译没有问题。

1 个答案:

答案 0 :(得分:9)

来自the gcc docs;

  

在GNU C中,您可以使用C ++样式注释,以“//”开头并一直持续到行尾。许多其他C实现允许这样的注释,它们包含在1999 C标准中。 但是,如果指定-std选项指定C99之前的ISO C版本或-ansi(相当于-std = c90),则无法识别C ++样式注释。

在Linux下,默认情况下mex会添加-ansi,这会禁用C ++注释。请更新您的mexopts文件,将-ansi替换为-std=c99或使用mex运行;

mex -g -largeArrayDims -ldl CFLAGS="\$CFLAGS -std=c99" TDSVDHNGateway.c