一、编译过程

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

(1)预处理

(2)编译

(3)汇编

(4)链接

例如hello.c程序

hello.c:

#include

int main(void)

{

printf (Hello world!\n);

return 0;

}

1、预处理:

预处理阶段,编译器将代码中的stdio.h的代码编译进来,用户使用-E选项进行查看

gccc -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、链接

在该阶段,在这里涉及一个重要的概念:函数库。在这个程序中并没有定义“printf"的函数实现,在预编译中包含进的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现“printf"函数的呢?

最后的答案是:系统把这些函数实现都己经被放入名为libc. so.6的库文件中去了,在没有特别指定时库函数中去,GCC会到系统默认的搜索路径“/usr/Iib”下进行查找,也就是链接到libc.so.6这样就能实现函数“printf"了,而这也就是链接的作用。

Gcc  hello.o –o hello

linux系统的编译原理,GCC编译原理_Linux编程_Linux公社-Linux系统门户网站相关推荐

  1. 2440 linux文件写,添加yaffs2文件系统 - Linux2.6.39在S3C2440上的移植_Linux编程_Linux公社-Linux系统门户网站...

    1.主机环境:VMare下Ubuntu10.04 ,1G内存. 2.编译编译环境:arm-linux-gcc 3.开发板:Micro2440,2M nor flash,256M nand flash. ...

  2. Linux命令【三】gcc编译+静态库+动态库+makefile+gdb调试

    用C编译器编译源文件:gcc 源文件 -o 可执行文件名 详细步骤: gcc -E a.c -o a.i预处理器将头文件展开,宏替换,去掉注释 gcc -S a.i -o a.s编译器将C文件变成汇编 ...

  3. android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...

    在上一章  Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...

  4. 01-2.C(C程序编译步骤-gcc 编译过程)

    c代码编译成可执行程序4步: 1.预处理:宏定义展开,头文件展开,条件编译,同时将代码中的注释删除,这里并不会检查语法 gcc -E hello.c -o hello.i 2.编译:检查语法,将预处理 ...

  5. 使用vi编辑器编辑一个C语言源程序hello.c,并使用编译工具GCC编译该源程序。

    一.关于gcc的下载: 1.**输入命令:**yum install gcc 2.检查是否安装成功:which gcc **二.**使用vi编辑器编写c语言程序并用gcc工具箱编译 1.touch h ...

  6. C++:GCC编译:GCC编译C++程序分步流程

    C或者C++程序从源代码生成可执行程序的过程,需要经历4个过程分别是:预处理,编译,汇编,链接. 但考虑实际使用过程中,用户可能并不关心程序的执行结果,只是想快速得到最终的可执行程序,因此gcc和gc ...

  7. 嵌入式linux编程,嵌入式Linux学习笔记 - 嵌入式Linux基础知识和开发环境的构建_Linux编程_Linux公社-Linux系统门户网站...

    注:所有内容基于友善之臂Mini2440开发板 一.嵌入式Linux开发环境的构建 嵌入式开发一般分为三个步骤: 1.编译bootloader,烧到开发板 2.编译嵌入式Linux内核,烧到开发板 3 ...

  8. c主线程如何等待子线程结束 linux_使用互斥量进行同步 - Linux C进程与多线程入门_Linux编程_Linux公社-Linux系统门户网站...

    互斥 简单地理解就是,一个线程进入工作区后,如果有其他线程想要进入工作区,它就会进入等待状态,要等待工作区内的线程结束后才可以进入. 基本函数 (1) pthread_mutex_init函数 原型: ...

  9. linux内核添加usb键盘驱动,配置USB外设 - linux-2.6.32在mini2440开发板上移植_Linux编程_Linux公社-Linux系统门户网站...

    linux-2.6.32在mini2440开发板上移植 配置USB外设 [日期:2013-04-08] 来源:Linux社区 作者:ssdsafsdsd [字体:大 中 小] 编者:因为LINUX内核 ...

最新文章

  1. 移植uboot第一步:下载,编译,烧到板子上试验
  2. Jquery学习笔记:利用find和children方法获取后代元素
  3. 游戏型计算机的配置表,爽玩游戏型详细配置列表及推荐理由
  4. 【渝粤题库】国家开放大学2021春2038财务管理题目
  5. python png 背景透明_python – Pygame:在png图像中将所有白色像素转换为完全透明...
  6. mysql用大白话解释_大白话解释给小白如何看别人的源码(一)数据库部分
  7. __set __get
  8. 【PetShop 4.0学习】1.技术特点
  9. vue和js点击下载pdf,word,png,jpg等格式的文件,解决点击下载pdf却是打开预览的问题
  10. JAVA实现汉字转拼英
  11. 关于XShell下载安装和连接Ubuntu(linux)
  12. Win11蓝屏代码IRQL NOT LESS OR EQUAL的处理方法
  13. android如何实现用户注册功能,Android 实现简单的登录注册功能(SharedPreferences和SQLite)...
  14. 澳洲移民 技术移民_满足COVID-19期间移民对语言访问的需求
  15. 国产紫光FPGA实现DDS信号发生器
  16. Python核心编程-Amy老师第七讲课程作业
  17. zoom会议设置,zoom 如何设置会议密码,每一步骤都要看一下。
  18. Git 回滚Rollback
  19. 关键词指数是什么意思?
  20. 哪个软件可以制作GIF动态图

热门文章

  1. 案例:用JS实现放大镜特效
  2. 在Windows 2003 64位下ASP无法连接Access数据库的解决办法
  3. MacBook Air写代码真香!包邮送一台!
  4. 1.5w字,30图带你彻底掌握 AQS!
  5. 这6种最常见分布式事务解决方案!请拿走不谢!
  6. 华为员工哀叹:32岁大码农只能在华为等裁,出去薪资没人接得住!出路在哪儿?...
  7. 立足GitHub学编程:13个不容错过的Java项目
  8. 今天是我“略懂”Python的第200天,我遇到了新刺激……
  9. 当下火热的大数据视频,免费送(含源码)
  10. 在项目管理情境下,如何做多项目管理?