2012-05-08 98 views
3

在LINUX中編譯C程序時,我得到了foll。錯誤:錯誤:在'int'之前預計'=',',',';','asm'或'__attribute__'

stream.h:1123: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int' 
stream.h:1124: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t' 
stream.h:1125: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'mblk_t' 

線1123,1124和1125給出如下:

__STREAMS_EXTERN int adjmsg(mblk_t *mp, register ssize_t length); 
__STREAMS_EXTERN mblk_t *allocb(size_t size, unsigned int priority); 
__STREAMS_EXTERN mblk_t *copyb(register mblk_t *mp); 

C程序包括一個頭文件又包括stream.h 任何想法,這可怎麼解決呢?

+3

只是一個說明,似乎你的終端也沒有配置適當的unicode(通常在Linux上的UTF-8)。所以''字符確實應該被引用。使消息更可讀。 –

+0

謝謝埃文。我現在用UTF-8配置了我的膩子,並且現在顯示爲引號。 – Tinyspark

回答

1

這並不是真的清楚你的代碼的上下文,但在我看來你使用的是OpenSSL庫(或者你正在從該源代碼複製粘貼&)。

streams_fastcall宏定義在kmem.h頭文件中。你包括它嗎?如果你只是在做複製粘貼&你只是有你STREAMS_EXTERN定義之前添加此行:

#ifndef streams_fastcall 
#if defined __i386__ || defined __x86_64__ || defined __k8__ 
#define streams_fastcall __attribute__((__regparm__(3))) 
#else 
#define streams_fastcall 
#endif 
#endif 

注意streams_fastcall聽起來像微軟特定的(但在Windows上廣泛使用)調用約定命名__fastcall。我猜是因爲它使用 的regparm屬性來指定使用寄存器而不是堆棧的一些參數應傳遞他們用這個名字,這是什麼__fastcall定義(或者僅僅是因爲它只是更快!笑)

+0

嗨Adrino,是的,我已經包含kmem.h文件。 – Tinyspark

+0

來自圖書館本身的標題應該沒問題,所以我猜猜你對你的內含物的順序做錯了什麼。檢查它包含在「stream.h」之前 –

1

它很明顯,__STREAMS_EXTERN被定義爲一種混亂的事情。

__STREAMS_EXTERN如何定義?

+0

#ifndef __STREAMS_EXTERN #define __STREAMS_EXTERN __EXTERN streams_fastcall #endif – Tinyspark

+0

好的,以及如何定義__EXTERN? :-P –

+0

#ifndef __EXTERN #define __EXTERN extern #endif – Tinyspark

0

萬一錯誤與任何缺失無關;或代碼中出現類似的語法錯誤,請檢查是否存在對openSSL包含的錯誤引用。

隨着你的openSSL在/ opt/openssl/include/openssl中包含err.h和evp.h,並且你編譯的指令是-I。 -L/opt/openssl/lib,-l加密和-l dl

在您的.h文件中包含此包含引發錯誤:#include(與err.h相同)。

簡單地將其替換爲:#include來解決它。

相關問題