我正在尝试一起编译汇编和 C 代码(不是 C 到汇编),但无法完成。
例如:
文件common.h
#ifndef __COMMON_H__
#define __COMMON_H__
struct tree{
tree* left;
tree* right;
void* elem;
};
void foo(int c);
#endif
文件common.S
#include "common.h"
.text
.globl foo
.ent foo
foo:
//foo implementation
.end foo
当我尝试编译时:
# gcc -c common.S
common.h: Assembler messages:
common.h:5: Error: unrecognized opcode `struct tree{'
common.h:7: Error: unrecognized opcode `tree* left'
common.h:8: Error: unrecognized opcode `tree* right'
common.h:10: Error: unrecognized opcode `void* elem'
common.h:12: Error: junk at end of line, first unrecognized character is `}'
common.h:14: Error: unrecognized opcode `void foo(int c)'
有什么方法可以使用 gcc 将 C 语言定义转换为汇编语言吗?
最佳答案
不,您不能在汇编语言中包含 C 声明。汇编程序不知道 struct tree
是什么意思。
如果你想写一个汇编语言函数 foo
来使用你定义的 struct tree
,你将不得不在不使用C 头文件。
要了解这可能是什么样子,请用 C 语言编写 foo
函数,使用 gcc -S
编译它以生成汇编列表,然后执行查看生成的编译器生成的 common.s
文件。 (您应该在单独的目录中执行此操作,以免破坏现有的 common.s
文件。)
您可能不会看到任何对 struct tree
或成员名称 left
、right
和 elem< 的引用
;相反,您会看到引用特定偏移量数据的汇编操作码。
关于编译包含包含 C 定义的头文件的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251463/