【问题标题】:error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'错误:在 'int' 之前应为 '='、','、';'、'asm' 或 '__attribute__'
【发布时间】:2014-12-01 20:36:03
【问题描述】:

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

【问题讨论】:

  • 请注意,您的终端似乎也没有配置正确的 unicode(通常在 linux 上为 UTF-8)。所以â 字符真的应该是引号。使消息更具可读性。
  • 谢谢埃文。我现在已经使用 UTF-8 配置了我的 putty,并且现在 â 显示为引号。

标签: c header-files


【解决方案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听起来类似于名为 __fastcall 的 Microsoft 特定(但在 Windows 上广泛使用)调用约定。我猜他们使用这个名字是因为它使用 regparm 属性指定应该使用寄存器而不是堆栈传递一些参数,这就是 __fastcall 定义的(或者仅仅是因为它更快!哈哈)

【讨论】:

  • 嗨阿德里诺,是的,我已经包含了 kmem.h 文件。
  • 库本身的标题应该没问题,所以我你在包含的顺序上做错了。检查它是否包含在“stream.h”之前
【解决方案2】:

很明显,__STREAMS_EXTERN 的定义方式很混乱。

__STREAMS_EXTERN 是如何定义的?

【讨论】:

  • #ifndef __STREAMS_EXTERN #define __STREAMS_EXTERN __EXTERN streams_fastcall #endif
  • #ifndef __EXTERN #define __EXTERN extern #endif
  • @Tinyspark 编译器看不懂streams_fastcall,好像是Windows的东西。
  • Daniel,我不明白您所说的“Windows 事物”是什么意思。另外,我正在 Linux 环境中编译我的代码。
  • @Adriano 谢谢,这是其他日子之一;)
【解决方案3】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多