c - 原始类型定义的 GCC 编译器错误

标签 c linux gcc

因此,在升级到 Linux Mint(并使用 GCC v4.7.3)后,一些 header 生成了一些非常奇怪的编译器错误。当我尝试编译时,我收到以下错误消息:

gcc s.c
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/include/setjmp.h:26:0,
                 from /usr/lib/gcc/x86_64-linux-gnu/4.7/include/bits/pthreadtypes.h:14,
                 from /usr/lib/gcc/x86_64-linux-gnu/4.7/include/pthread.h:14,
                 from s.c:2:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include/bits/setjmp.h:30:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘typedef’
In file included from /usr/lib/gcc/x86_64-linux-gnu/4.7/include/bits/pthreadtypes.h:14:0,
                 from /usr/lib/gcc/x86_64-linux-gnu/4.7/include/pthread.h:14,
                 from s.c:2:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include/setjmp.h:46:5: error: unknown type name ‘__jmp_buf’

Compilation exited abnormally with code 1 at Mon Nov 25 09:03:37

所以这是触发编译器错误的 header :

/* Define the machine-dependent type `jmp_buf'.  x86-64 version.  */
#ifndef _BITS_SETJMP_H
#define _BITS_SETJMP_H  1

#include <bits/wordsize.h>

# if __WORDSIZE == 64
typedef long int __jmp_buf[8];
# else
typedef int __jmp_buf[6];
# endif

#endif  /* bits/setjmp.h */

这是源代码(s.c):

#include <stdio.h>
#include <pthread.h>

int main()
{
  return 0;
}

这是怎么回事?

最佳答案

所以我用谷歌搜索“linux pthreadtypes”并找到了另一个版本的 at code dot woboq dot org,它是特定于 Linux 的。它编译得很好,所以我删除了现有版本的 header ,它给我之前发布的错误。不确定我从哪里得到那个版本,但它在 Internet 上的某个地方,很可能是 FreeBSD 版本。必须确保您的 POSIX 线程 header /库与您的操作系统兼容。

关于c - 原始类型定义的 GCC 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198955/

相关文章:

使用指针的 C 语言程序动态表

正则表达式比较多个文件中的字符串

c - 进程调用 ptrace(PTRACE_TRACEME, ...) 后会发生什么?

C99 不是 GCC 的默认 C 版本?

c - 为什么我们需要在 pthread_cond_wait 之前进行条件检查

c - 获取数字的左边数字?

linux - 使用 Javascript 运行远程命令

linux - 导出命令,其中包含 bash 脚本中其他变量声明中的变量名称和值

gcc - 如何在我的 C++ Android 应用程序中启用 VFP 或 NEON 支持?

C 中类型之间的转换