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

2023-11-23

gcc 的手册页指出

   file.s
       Assembler code.

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

许多标准包含文件都有

#ifndef __ASSEMBLY__ 
...
#endif

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

这是一些测试代码:

test.S

#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 中的错误吗?
或者我在这里做错了什么?

NOTE:
我在测试中看到 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/生成文件:

KBUILD_AFLAGS   := -D__ASSEMBLY__

LKML 上发布了可迁移到的补丁__ASSEMBLER__2005年,但它们没有合并:回复:[RFC][MEGAPATCH] 更改ASSEMBLY to 汇编器(由 GCC 从 2.95 到当前的 CVS 定义)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc 汇编器预处理器与标准标头不兼容 的相关文章

  • RISC-V反汇编器与秒杀运行结果不符?

    我已经设置了一个 hello world 程序只是为了测试我的riscv32 unknown elf工具链 spike pk等等虽然我设法使用打印了 hello worldspike isa RV32 pk hello elf 我发现如果我
  • GCC 变量映射和 MISRA-C

    我主要知道两种使用 GCC 声明内存映射寄存器的方法 有许多变体 使用双字段 每个外设的数据结构等 要么使用初始化为正确地址的指针 例如volatile uint32 t pMyRegister uint32 t 0xDEADBEEFUL
  • C 未定义的行为。严格的别名规则,还是不正确的对齐? [复制]

    这个问题在这里已经有答案了 我无法解释该程序的执行行为 include
  • 编译Linux内核模块时出现错误:“CONFIG_X86_X32已启用,但没有binutils支持”和不需要的“n”字符

    我想得到Rasta Ring0 调试器 http rr0d droids corp org 在我的 x86 64 Linux 中编译的 0 3 版本 它是一个 Linux 内核模块 我已将 32 位内联汇编替换为 64 位汇编 如我的问题中
  • ARM、VFP、浮点、惰性上下文切换

    我正在为 ARM 处理器 Cortex A9 编写操作系统 我正在尝试实现浮点寄存器的延迟上下文切换 这背后的想法是 浮点扩展最初对线程禁用 因此不需要在任务切换上保存浮点上下文 当线程尝试使用浮点指令时 会触发异常 然后 操作系统启用浮点
  • 如何为 iPhone 构建静态库?

    我想我已经到处寻找问题的答案 但没有运气 我正在尝试创建一个简单的静态库来在 iPhone 设备上运行 但我总是以 XCode 结束 说 文件不属于必需的架构 并且我已经尝试了我发现的每个构建标志 但没有任何运气 我已经让它在模拟器上工作了
  • 在 Objective-C 中使用 GCC C 扩展(语句表达式)进行初始化 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 GNU C 提供了标准 C 中没有的多种语言功能 这些扩展在 C 和 Objective C 中都可用 有一个 GCC C 扩展 称为语句表达式
  • 有没有办法在 OSX 中安装 gcc 而无需安装 Xcode?

    我用谷歌搜索了一下 似乎没有办法在 OS X 上安装 gcc 而不安装 Xcode 至少需要 1 5GB 的空间 我需要的只是 gcc 而不是 Xcode 附带的其他垃圾 此时 我将采用任何其他类型的 C 编译器 我知道我可以简单地安装 X
  • 与 SSE 比较 16 字节字符串

    我有 16 字节的 字符串 它们可能更短 但您可能会假设它们在末尾用零填充 但您可能不会假设它们是 16 字节对齐的 至少不总是 如何编写一个例程将它们与 SSE 内在函数进行比较 是否相等 我发现这个代码片段可能会有帮助 但我不确定它是否
  • ./configure 使用指定版本的 g++

    如何告诉 配置 文件使用指定版本的 g 进行编译 Thanks 在 bash shell 中 您可以执行以下操作 configure CC gcc 2 95 其他 shell 也会有类似的技术 但我无法帮助您了解具体细节 如果您的项目是 C
  • 有没有办法在另一个#define 中执行#define?

    我知道我正试图朝自己的腿开枪 但是 这将使我能够使其余 大量 代码更小且更具可读性 是否有任何棘手的方法可以在另一个预处理器宏内部创建预处理器宏 这是我正在寻找的示例 我的真实场景更复杂 That s what I want to do a
  • 如何在 MOS 6502 的 asm 中创建延迟

    我是 ASM 新手 我正在尝试研究如何为以下代码创建延迟 org 1000 loop inc d021 jmp loop 我想评论已经足够清楚了 每帧更改颜色的代码示例 1 50 秒 sei enable interrupts loop1
  • (nasm x86实模式)如何在引导加载的扇区中写入/读取字符串?

    我正在使用 NASM 为 x86 实模式编写一个最小操作系统 用于教育目的 我想使用 512 字节引导扇区加载包含操作系统其余部分的更大扇区 我已经成功创建了一个加载另一个扇区的引导扇区 但我似乎无法在加载的扇区中写入 读取字符串 这是我的
  • 如何在 GCC 插件中添加内置函数?

    GCC 插件可以添加新的内置函数吗 如果是的话 该如何正确做呢 GCC 版本是 5 3 或更高版本 代码由C语言编写的插件编译和处理 中提到了gcc melt org 上 GCC 插件的基本原理 http starynkevitch net
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 对C宏扩展和整数运算感到困惑[重复]

    这个问题在这里已经有答案了 可能的重复 一个谜语 C https stackoverflow com questions 5611724 a riddle in c 我对以下代码片段有几个问题 include
  • 与 glib-2.0 链接时,cygwin gcc 4.3 中的参数顺序很重要

    我正在尝试使用 cygwin 编译适用于 os x 和 linux 的代码 然而 我发现 gcc 的参数顺序给出了意想不到的结果 例如 以下情况会失败 gcc std gnu99 I usr include glib 2 0 I usr l
  • 使用宏计算源文件行数?

    是否可以使用 C C 预处理器将源文件中的行数计算为宏或某种编译时可用值 例如 我可以更换吗MAGIC1 MAGIC2 and MAGIC3在下面 并在使用时以某种方式获取值 4MAGIC3 MAGIC1 can be placed whe
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc

随机推荐

  • 使用向负无穷大截断与向零截断的优点

    我想知道使用负无穷大截断有哪些好处 Haskell从编程语言 编译器实现的角度来看 Ruby Ruby 而不是向零截断 C PHP 似乎向负无穷大截断是正确的方法 但我还没有找到这种说法的可靠来源 也没有找到这种决定如何影响编译器的实现 我
  • 在手动引导之前使用角度服务

    我想在进行手动引导之前使用角度服务 未使用 ng app 指令 有没有一种方法可以访问角度服务而无需在空 div 上调用 angular bootstrap 以下方法有效 但我想知道是否有更直接的解决方案 var element angul
  • 在 JSP 中使用 if-else

    我使用以下代码在浏览器上打印用户名
  • 是否可以测试 IBAction?

    对 IBOutlet 进行单元测试相当容易 但是 IBActions 怎么样 我试图找到一种方法来做到这一点 但没有运气 有没有办法对视图控制器中的 IBAction 和 nib 文件中的按钮之间的连接进行单元测试 对于完整的单元测试 每个
  • 访问部署在tomcat中的SoapUI Mock Service中的文件资源

    问题简而言之 访问本地file in 脚本调度程序关于项目路径 即def file new File groovyUtils projectPath responseFileName xml 这是工作正常当测试运行时SoapUI as 模拟
  • Python 模拟远程 tail -f?

    我们有几个应用程序服务器和一个中央监控服务器 我们当前正在从监控服务器运行带有 tail f 的 ssh 以从应用程序服务器实时传输多个文本日志文件 除了整个方法的脆弱性之外 问题还在于终止 ssh 进程有时会留下僵尸尾进程 我们已经尝试使
  • 过滤SQLAlchemy查询结果对象的一对多属性

    假设我有几个对象 具有一对多的关系 例如 class Parent id other cols etc children relationship Child backref parent class Child parent id Col
  • CGFloat:round、floor、abs 和 32/64 位精度

    TLDR 如何以编译 32 位和 64 位 CGFloats 且不发出警告的方式调用标准浮点代码 CGFloat 定义为 double 或 float 具体取决于编译器设置和平台 我正在尝试编写在这两种情况下都能正常工作的代码 而不会生成大
  • 为什么 Rust 中字符串的第一个字母大写如此复杂?

    我想将 a 的第一个字母大写 str 这是一个简单的问题 我希望有一个简单的解决方案 直觉告诉我要做这样的事情 let mut s foobar s 0 s 0 to uppercase But strs 不能像这样被索引 我能够做到的唯一
  • java中本地时区与GMT的转换

    我正在尝试将本地时区的日期转换为 GMT 我做了这样的事情 SimpleDateFormat sdf new SimpleDateFormat MM dd yyyy HH mm ss sdf setTimeZone TimeZone get
  • 在eclipse中离线安装sonarlint插件

    我有一些系统 由于安全问题 我们让它们没有互联网 我们如何在eclipse中离线安装sonarlint插件呢 手动安装步骤是什么 我们从哪里下载这个jar 从另一个帖子 下载你的插件 打开Eclipse 从菜单中选择 Help Instal
  • 转换 GLKMatrix4 和 CATransform3D

    有没有办法从 CATransform3D 转换为 GLKMatrix4 或者我总是需要手动将它们从值转换为值 我想铸造会更快 不幸的是目前还没有 Apple 很可能使用隐藏的 API 调用来通过 CALayers 和 OpenGL 进行转换
  • 在 ansi-term 中使用 ssh 时 Shell 提示重复

    当我使用 SSH 从 emacs 中的 ansi term 会话登录 Ubuntu 12 04 计算机时 提示显示不正确 0 ubuntu jumplin ubuntu jumplin 这应该如下所示 ubuntu jumplin 我已经尝
  • 将文件扩展名与我的应用程序关联

    我知道如何手动将特定文件或通用扩展名与特定 OS X 应用程序关联 获取信息 gt 打开方式 gt 其他 我知道如何在 OS X 中将带有扩展名的文件拖放到 不受支持 的应用程序上 在应用程序上拖动时按住命令选项 作为 OS X 应用程序的
  • 使用 vue-cli 遇到“无法推断解析器”错误

    当尝试使用以下命令构建新的 webpack 项目时 我反复收到错误vue cli 我正在关注最新版本 3 0 0 beta 11 的文档 也尝试使用早期版本 不是测试版 当我跑步时yarn serve它尝试启动开发服务器并构建项目 但在这里
  • 在python脚本中访问共享的smb ubuntu

    我的网络上有一个共享的 ubuntu 驱动器 我可以使用 smb servername sharedfolder 或 smb sharedfolder 在 nautilus 中访问该驱动器 我需要能够从我的 ubuntu 机器 8 10 访
  • 无法使用 Android Action Bar 下拉导航更改文本颜色

    我在操作栏上使用下拉导航 当使用深色操作栏时 我无法为相应的文本获得合理的颜色 操作栏本身是深灰色的 文本颜色是黑色的 所以很难阅读 我遵循了基本说明操作栏开发人员指南所以我的代码很简单 SpinnerAdapter mSpinnerAda
  • 我旁边还有人不懂 ASP.NET MVC 吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 自 CTP 以来我一直在摆
  • iPhone - 为 Interface Builder 创建自定义对象?

    我目前正在子类化 UIView 以创建自定义对象 它们工作得很好 在界面生成器中 我拖放一个 uiview 并将类名称设置为我的自定义视图 并且在运行时该视图将根据我的代码填充 问题 是否可以使我的自定义视图在界面生成器中绘制 并且可以拖放
  • gcc 汇编器预处理器与标准标头不兼容

    gcc 的手册页指出 file s Assembler code file S file sx Assembler code that must be preprocessed 许多标准包含文件都有 ifndef ASSEMBLY endi