在LINUX中编译C程序时,我得到了foll。错误:
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 知道如何解决这个问题吗?
答案 0 :(得分:1)
很明显,__STREAMS_EXTERN
的定义方式正在搞乱。
如何定义__STREAMS_EXTERN
?
答案 1 :(得分: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
声音类似于Microsoft特定(但在Windows上广泛使用)调用名为__fastcall
的约定。我猜他们使用了这个名字,因为它使用了
regparm
属性指定应该使用寄存器而不是堆栈传递一些参数,这是__fastcall
定义的(或者仅仅因为它更快!lol)
答案 2 :(得分:0)
如果错误与任何遗漏无关;或者代码中的类似语法错误,检查对openSSL包含的错误引用。
你的openSSL在/ opt / openssl / include / openssl中包含了err.h和evp.h,你编译的指令是-I。 -L / opt / openssl / lib,-l crypto和-l dl
在.h文件中包含此内容会引发错误:#include(与err.h相同)。
只需用以下内容替换它:#include即可解决它。