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

Pou*_*uya 2 c gcc mex

我想在ubuntu中编译一个使用mexgcc配置的C代码.我可以在OSX中顺利编译代码.然而,当我想编译它在Linux中,编译器生成的注释行的错误开始//(它工作正常/* */.由于该方案包括来自第三方库的几个头文件,我不能代替///* */.我想知道是否有办法克服这个问题.

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

任何帮助表示赞赏

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

mex -g -largeArrayDims -ldl TDSVDHNGateway.c
Run Code Online (Sandbox Code Playgroud)

以下是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
Run Code Online (Sandbox Code Playgroud)

头文件中的第17行是:

//Defining index_t
typedef size_t index_t;
Run Code Online (Sandbox Code Playgroud)

如果我//Defining index_t/*Defining index_t*/代码替换将编译没有问题.

Joa*_*son 9

来自gcc文档 ;

在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
Run Code Online (Sandbox Code Playgroud)