linux GCC编译程序的过程

使用gcc编译程序时,编译过程可以细分为四个阶段:

  • 预处理

    预处理过程读入程序源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换。预处理过程会删除程序中的注释和多余的空白字符。

  • 编译

    编译阶段中,gcc首先检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。

  • 汇编

    汇编阶段是把在编译阶段产生的汇编文件转成目标代码。

  • 链接

    将编译输出的文件链接成最终可执行的二进制文件

如图:

示例:

vi hello.c

#include <stdio.h>

int main(){
        printf("hello world");
        return 0;
}
$ ls
hello.c

$ gcc -E hello.c -o hello.i  #预处理,把预处理的结果输出为hello.i 文件
$ ls
hello.c  hello.i

$ gcc -S hello.i    #编译,把预处理的结果编译为汇编文件
$ ls
hello.c  hello.i  hello.s

$ gcc -c hello.s   #汇编,把汇编文件转换成目标文件
$ ls
hello.c  hello.i  hello.o  hello.s

$ gcc hello.o -o hello  #链接,把目标文件连接成一个名为hello的二进制可执行文件
$ ls
hello  hello.c  hello.i  hello.o  hello.s
时间: 2024-10-05 15:23:20

linux GCC编译程序的过程的相关文章

Linux下Gcc 的编译过程

在linux下开发难免会用到gcc编译.GCC(GNU Compiler Collection.GNU编译器套装),是由 GNU 开发的编程语言编译器.它是GNU编译器套装以GPL许可证所发行的自由软件,也是 GNU计划的关键部分. 使用GCC编译程序时,编译过程能够被细分为四个阶段: ◆ 预处理(Pre-Processing) ◆ 编译(Compiling) ◆ 汇编(Assembling) ◆ 链接(Linking) 1.预处理 对源码文件里的文件包括(include).预编译语句(如宏定义

嵌入式Linux GCC常用命令

本文和大家分享的主要是嵌入式Linux GCC常用命令相关内容,一起来看看吧,希望对大家学习嵌入式Linux有所帮助. 1.简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective C 语言.Pascal 语言.COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等.而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 

GCC与编译过程

GCC与编译过程   GCC(GNU Compiler Colletion),GUN编译器套装,是一套由GNU开发的编程语言编译器.Linux系统下的GCC编译器实际上是调用其他不同的工具来完成预处理.编译.汇编和链接工作. 一.编译过程 在计算机的眼里,只有1和0.不幸的是,我们用C语言写出来的代码,计算机无法直接看明白.所以一个程序如果需要被计算机执行,那么就必须翻译成能被计算机读懂并执行的1和0.实现这一结果的过程,我们称之为编译. 编译包括以下步骤:预处理.编译.汇编和链接.具体过程如下

Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错,

Linux下编译程序时,经常会遇到“undefined reference to XXX” 报错, 这里总结一些可能的原因和解决方案,给需要的朋友: 说道undefined reference error,先提一下Linux gcc链接规则: 链接的时候查找顺序是: -L 指定的路径, 从左到右依次查找 由 环境变量 LIBRARY_PATH 指定的路径,使用":"分割从左到右依次查找 /etc/ld.so.conf 指定的路径顺序 /lib 和 /usr/lib (64位下是/lib

Linux GCC编译使用动态、静态链接库 (转)

原文出处:http://blog.csdn.net/a600423444/article/details/7206015 在windows下动态链接库是以.dll后缀的文件,二在Linux中,是以.so作后缀的文件. 动态链接库的好处就是节省内存空间. 1.Linux下创建动态链接库 在使用GCC编译程序时,只需加上-shared选项即可,这样生成的执行程序即为动态链接库. 例如有文件:hello.c x.h main.c [plain] view plaincopy 编译:gcc hello.

深入剖析 linux GCC 4.4 的 STL string

转自: 深入剖析 linux GCC 4.4 的 STL string 本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术. 平台:x86_64-redhat-linuxgcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 1. 问题提出 最近在我们的项目当中,出现了两次与使用string相关的问题. 1.1. 问题1:新代码引入的Bug 前一段时间有一个老项目来

gcc编译程序的流程

>>gcc编译器 gcc编译器:(C语言的编译器gcc/g++) gcc编译程序的流程 源文件(.c)——>预处理(.i)——>编译——>汇编(.s)——>链接(.o)——>可执行文件 (filename.c)    (预处理器)(编译器)(汇编器) (连接器)  (excutefile) 编译运行五部曲:(一般就三步:对c文件直接编译后直接生成可执行文件后运行 gcc bcard.c    gcc -o bcard bcard.c     ./bcard -c,

Linux GCC的整型变量和实型变量

原教材内容为Turbo C代码实验环境,更改为Linux GCC之后,在整形变量和实型变量的使用过程中以下两点不得不考虑. 一.整型变量 整型变量的基本类型符为int,在int之前可以根据需要分别加上修饰符(modifier):short(短型)或long(长型),得到以下3中整型变量. ● 基本整型:类型说明符为int,在内存中占2个字节. ● 短整型:类型说明符为short int或short.所占字节和取值范围与基本整型相同. ● 长整型:类型说明符为long int或long,在内存中占

C语言 gcc 编译程序

C语言 gcc 编译程序 上篇博客写到了 编写HelloWorld,不管是通过IDE还是记事本最终的验证结果还是需要运行程序来核验,C语言在编写完成后需要通过gcc编译成可执行程序来进行使用,下面我会进行说明. C语言 编译过程 一.C程序编译步骤 C代码编译成可执行程序经过4步: 1)预处理:宏定义展开.头文件展开.条件编译等,同时将代码中的注释删除,这里并不会检查语法 2)编译:检查语法,将预处理后文件编译生成汇编文件 3)汇编:将汇编文件生成目标文件(二进制文件) 4)链接:C语言写的程序