作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个汇编文件 (asm.S
),它需要在 C 头文件 (c_decls.h
) 中定义一个常量 #define
>).除了我想要的#define
之外,头文件还包含C 函数声明。不幸的是,gcc
在尝试编译程序集文件时失败了。例如,
c_decls.h
#ifndef __c_decls_h__
#define __c_decls_h__
#define I_NEED_THIS 0xBEEF
int foo(int bar);
#endif
asm.S
#include "c_decls.h"
.globl main
main:
pushl %ebp
movl %esp, %ebp
movl $I_NEED_THIS, %eax
leave
ret
输出
> gcc -m32 asm.S
c_decls.h: Assembler messages:
c_decls.h:6: Error: junk '(int bar)' after expression
c_decls.h:6: Error: suffix or operands invalid for 'int'
有没有办法在汇编文件中#include
包含函数声明的C 头文件? (更改 header 或移动/重新定义 #define
不是一种选择。)
最佳答案
使用 cpp
的 -dM
选项只从头文件中获取#defines,并改为包含该文件。
cpp -dM c_decls.h > bare_c_decls.h
现在将 bare_c_decls.h
包含在您的 .S 文件中。如果您不能更改 .S 文件中的#include,请在另一个目录中生成裸头文件,并将该包含路径放在编译器/汇编程序命令行中,放在其他所有内容之前。
最后,您可以将所有这些都包装在一个 makefile 中,这样您的“裸”头文件就会自动生成。
关于c - #include header with C declarations in a assembly file without errors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4928238/
我是一名优秀的程序员,十分优秀!