linux GUN gcc编译四个过程:预处理、编译、汇编、链接

参考博客:http://www.cnblogs.com/qytan36/archive/2010/05/25/1743955.html

GCC编译C源码有四个步骤:预处理-----> 编译 ----> 汇编 ----> 链接

四阶段作用:(对应文件后缀依次是:.i>.s>.o>.exe)

》预处理  将引进的头文件的代码加入到当前文件中。选项"-E"预处理。 用法:gcc -E hello.c –o hello.i

》编译   Gcc首先要检查代码的规范性、是否有语法错误等,在检查无误后,Gcc把代码翻译成汇编语言。选项"-S"预处理。 用法:gcc -S hello.i –o hello.s.(该选项只进行编译而不进行汇编,生成汇编代码。)

》汇编   汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码。选项"-c"预处理。 用法:gcc -c hello.s –o hello.o。

》链接   在成功编译之后,就进入了链接阶段。无选项链接 用法:gcc hello.o –o hello.exe。

注释:

在链接阶段,编译器其实是将系统标准头文件对应的实现体编译所称的对应的链接库,如stdio.h对应的名为libc.so.6的库文件,链接进入自己汇编后生成的.o文件中。最终生成可执行程序。

可以用ldd命令查看动态库加载情况。

函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6就是动态库。gcc在编译时默认使用动态库。    

时间: 2024-11-20 02:19:26

linux GUN gcc编译四个过程:预处理、编译、汇编、链接的相关文章

GCC编程四个过程:预处理-编译-汇编-链接

在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序. 一.GCC快速入门Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件]其中,目标文件可缺省,Gcc默认生成可执行的文件名为:编译文件.out我们来看一下经典入门程序"Hello World!"# vi hello.c #include <stdlib.h>#include <stdio.h>void main(void){printf("he

gcc的四个编译过程

一.我们在Linux下先编写一个HelloWorld程序,用来供GCC编译时使用 #include <stdio.h> int main() { printf("Hello World"); return 0; } 我们可以直接使用gcc -o helloWorld helloWorld.c 来把源文件.c编译成可执行文件helloWorld. 但是,其实gcc编译的这个过程可分为4步,具体如下: 二.GCC的命令剖析--四步走 从上面我们知道GCC编译源代码生成最终可执行

Linux下Gcc 的编译过程

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

gcc/g++ 实战之编译的四个过程

gcc和g++分别是GNU(一个开源组织)的c&c++编译器 对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序.gcc可以根据后缀名为.c或.cpp分别按c程序和c++程序来编译,但是g++无论是.c或.cpp都统一按c++程序来编译. 编译阶段,g++会调用gcc,链接阶段通常会用g++来完成,g++在编译的过程中,其实是调用gcc按照c++程序来编译的.即编译工作最终都是由gcc来完成的.这是因为gcc命令不能自动和

Linux下C语言执行过程(预处理,编译,汇编,链接,执行)

1.C语言的执行过程包括5个步骤:分别是:预处理,编译,汇编,链接,执行 第一步:编写C源代码,截图如下: 2.预处理,命令为:gcc -E variable.c -o variable.i(这步的作用是文件的展开和宏替换),生成的文件类型是.i类型的. 3.编译:命令为:gcc -S variable.i -o variable.s,这里的.s文件就成了会变语言,截图如下: 4.汇编,命令是:gcc -c variable.s -o variable.o,截图如下: 5,链接:命令:gcc -

Linux系统GCC常用命令和GCC编译过程描述

前言: GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言.GCC 很快地扩展,变得可处理 C++.后来又 扩展能够支持更多编程语言,如Fortran.Pascal.Objective-C.Java.Ada.Go以及各类处理器架构上的汇编语言等,所以改 名GNU编译器套件(GNU Compiler Collection).(百度百科,想了解自己查询) 一.GCC程序的编译过程大概分四个阶段 预处理(Pre-Processing) 编译(Compil

GCC编译器原理(三)------编译原理三:编译过程---预处理

Gcc的编译流程分为了四个步骤: 预处理,生成预编译文件(.文件):gcc –E hello.c –o hello.i 编译,生成汇编代码(.s文件):gcc –S hello.i –o hello.s 汇编,生成目标文件(.o文件):gcc –c hello.s –o hello.o 链接,生成可执行文件:gcc hello.o –o hello 一.预处理 预编译程序读出源代码,对其中内嵌的指示字进行响应,产生源代码的修改版本,修改后的版本会被编译程序读入. 在 GNU 术语中,预处理程序叫

Linux | GCC如何实现代码编译&amp;&amp;汇编&amp;&amp;链接过程

  正文: 每次我们程序员所写的 代码 是给程序员看的呢?还是给电脑看的?其实我们所写的代码只是我们程序员之间交流的一样特殊语言,电脑是看不懂的.那么我们如何实现人机交流呢?这就不得不请出我们我们今天的主角人机交换的桥梁---编译器,编译器有很多,我们今天介绍的是一种基于 Linux 系统的 GCC 编译器,以下代码都是在 Linux 系统上 VI 编辑器代码 GCC 编译代码实现的. 1.GCC概述 通常我们所写的代码无论 C \ C++ 等一些高级语言其实电脑是识别不了的.代码只是我们程序员

C语言预处理 编译 汇编 链接四个阶段

c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接. 编译过程 编译过程又可以分成两个阶段:编译和会汇编. 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段: 第一个阶段是预处理阶段,在正式的编译阶段之前进行.预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容.如#include指令 就是一个预处理指令,它把头文件的内容添加到.cpp文件中.这个在编译之前修改源文件的方式提供