编译包含包含C定义的头文件的汇编代码

时间:2011-11-24 02:07:19

标签: c gcc compiler-construction assembly avr-gcc

我试图将汇编和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集成到汇编中的任何方法?

提前致谢。

3 个答案:

答案 0 :(得分:2)

不,您不能在汇编语言中包含C声明。汇编程序不知道struct tree的含义。

如果要编写使用foo定义的汇编语言函数struct tree,则必须在不使用C头文件的情况下执行此操作。

要了解这可能是什么样子,请在C中编写foo函数,使用gcc -S编译它以生成汇编列表,然后查看生成的编译器生成common.s个文件。 (你应该在一个单独的目录中执行此操作,这样就不会破坏现有的common.s文件。)

您可能看不到对struct tree或成员名称leftrightelem的任何引用;相反,您将看到在某些偏移处引用数据的汇编操作码。

答案 1 :(得分:1)

您无需编译头文件。试试这个:

# gcc -c common.S

没有

#include <common.h> 

共同点。

答案 2 :(得分:0)

我建议您查看Inline Assembler Cookbook