我想使用配置了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*/
,代码将被编译没有问题。
答案 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