2013-07-31 115 views
2

我想使用配置了gcc的mex在ubuntu中編譯C代碼。我可以順利編譯OSX中的代碼。但是,當我想在Linux中編譯它時,編譯器會在註釋行中產生錯誤//(它可以很好地與/* */一起工作。由於該程序包含來自第三方庫的幾個頭文件,所以我不能用/* */替代//。 我想知道是否有任何辦法可以繞過來克服這個問題Mex在編譯Linux中的C代碼時爲//生成錯誤

MATLAB版本:R2012b gcc版本在Linux中:4.7.2 gcc版本的OSX: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

你能列出編譯器錯誤嗎? – Rhs

+2

請確定併發布'mex'用於調用'gcc'的確切命令行。我懷疑那裏有一些東西是禁用''''樣式註釋的支持(有幾個選項可以做到這一點(以及其他的東西))。 – zwol

+0

要允許在C代碼中使用C++註釋,請調用mex,如下所示:'mex CFLAGS =「\ $ CFLAGS -Wp,-lang -c-C++ - 註釋」mymexfile.c「 – Praetorian

回答

9

the gcc docs;

在GNU C中,您可以使用C++樣式的註釋,以'//'開頭並繼續,直到行尾。許多其他C實現允許這樣的評論,並且它們被包括在1999 C標準中。 但是,如果您在C99之前指定了指定ISO C版本的-std選項,或者-ansi(相當於-std = c90),則無法識別C++樣式註釋。

在Linux下,在默認情況下mex增加-ansi,禁用C++註釋。要麼更新您的mexopts文件,用-std=c99替換-ansi,要麼運行mex;

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

謝謝。它解決了我的問題 – Pouya