gpt4 book ai didi

c - #include header with C declarations in a assembly file without errors?

转载 作者:太空狗 更新时间:2023-10-29 16:59:17 25 4
gpt4 key购买 nike

我有一个汇编文件 (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/

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