3

在 LINUX 中编译 C 程序时,我明白了。错误:

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 知道如何解决这个问题吗?

4

3 回答 3

1

很清楚,__STREAMS_EXTERN它的定义方式是把事情搞砸了。

如何__STREAMS_EXTERN定义?

于 2012-05-08T13:17:54.837 回答
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定义(或者仅仅是因为它更快!哈哈)

于 2012-05-08T13:57:27.447 回答
0

如果错误与任何缺失无关;或代码中的类似语法错误,请检查对 openSSL 包含的错误引用。

使用您的 openSSL 在 /opt/openssl/include/openssl 中包含 err.h 和 evp.h,并且您编译的指令为 -I。-L /opt/openssl/lib、-l 加密和 -l dl

将此包含在您的 .h 文件中会引发错误:#include(与 err.h 相同)。

只需用这个包含替换它:#include 来解决它。

于 2014-12-01T12:36:03.360 回答