我试图将汇编和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-definitions集成到汇编中的任何方法?
提前致谢。
答案 0 :(得分:2)
不,您不能在汇编语言中包含C声明。汇编程序不知道struct tree
的含义。
如果要编写使用foo
定义的汇编语言函数struct tree
,则必须在不使用C头文件的情况下执行此操作。
要了解这可能是什么样子,请在C中编写foo
函数,使用gcc -S
编译它以生成汇编列表,然后查看生成的编译器生成common.s
个文件。 (你应该在一个单独的目录中执行此操作,这样就不会破坏现有的common.s
文件。)
您可能看不到对struct tree
或成员名称left
,right
和elem
的任何引用;相反,您将看到在某些偏移处引用数据的汇编操作码。
答案 1 :(得分:1)
您无需编译头文件。试试这个:
# gcc -c common.S
没有
#include <common.h>
共同点。
答案 2 :(得分:0)
我建议您查看Inline Assembler Cookbook。