gpt4 book ai didi

gcc 汇编预处理器与标准头文件不兼容

转载 作者:行者123 更新时间:2023-12-04 17:18:23 28 4
gpt4 key购买 nike

gcc 的手册页指出

   file.s
Assembler code.

file.S
file.sx
Assembler code that must be preprocessed.

许多标准的包含文件都有
#ifndef __ASSEMBLY__ 
...
#endif

包装器以允许从程序集文件中包含。我可以发誓我以前用 gcc 编写过程序,它在组装时定义了这一点,但现在我遇到了问题。

下面是一些测试代码:

测试
#include <sys/syscall.h>
#include <asm/signal.h>
.intel_syntax noprefix

.text
.global foo // int foo(int pid)
foo:
mov esi,SIGUSR1
mov eax,SYS_kill
syscall
ret

当我跑 gcc -c test.S ,它提示 asm/signal.h 中的各种东西,因为它没有看到 __ASSEMBLY__定义。

现在我的工作是:
#ifndef __ASSEMBLY__
#define __ASSEMBLY__
#endif

但这似乎是错误的,必须将其添加到我的所有文件中。

这是 GCC 中的错误吗?
或者我在这里做错了什么?

笔记:
我在测试中看到 gcc 确实定义了 __ASSEMBLER__但大多数头文件测试 __ASSEMBLY__ (我确实看到一对测试 __ASSEMBLER__ )。是否在某个时候更改了适当的 ifdef?

我正在使用 Ubuntu 14.04,并且 gcc 报告版本:gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

最佳答案

__ASSEMBLY__是 Linux 内核项目在知道 gcc 预定义宏的存在之前自己制定的约定 __ASSEMBLER__ .

linux内核下传__ASSEMBLY__明确在 linux/Makefile :

KBUILD_AFLAGS   := -D__ASSEMBLY__

在 LKML 上发布了补丁以迁移到 __ASSEMBLER__在 2005 年但他们没有合并: Re: [RFC][MEGAPATCH] Change ASSEMBLY to ASSEMBLER (defined by GCC from 2.95 to current CVS)

关于gcc 汇编预处理器与标准头文件不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28924355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com