zhliao2

风雨兼程,一路向北-------fpga (Keep a quiet heart study)
【笔记】gcc编译流程

参考<<嵌入式Linux应用程序开发>>

 

首先给出一个最常见的程序hello.c

# include <stdio.h>

int main(void)
{
        printf("hello, this is embedded world");
        printf("\n");
        return 0;
}

gcc编译的流程有4个步骤

1:预处理(对包含的头文件#include和宏定义#define,#ifdef等进行处理)

gcc -E hello.c -o hello.i

 

2:编译(gcc首先要检查代码的规划性,是否有语法错误等,以确定代码要实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言)

gcc -S hello.i -o hello.s

 

3:汇编(把编译生成的.s文件转换成目标文件)

gcc -c hello.s -o hello.o

 

4:  链接

gcc hello.o -o hello

函数库有静态库和动态库两种

静态库:

是指编译链接时,将库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般通常为”.a“。

动态库:

是指在编译链接时并没有将库文件的代码加入可执行文件中,而是在程序执行时加载库,这样就可以节省系统的开销。其后缀名通常为”.so“。

 

posted on 2012-12-28 21:36  zhliao  阅读(220)  评论(0)    收藏  举报