Linux编译过程

编译连接过程中每个阶段完成的事情:

  1. 预编译:

     替换注释  宏替换 处理预处理指令
    
  2. 编译:

    词法语法的解析  代码优化  汇总符号(代码中只有数据和函数会生成符号)  
          .data 初始化不为0的数据
          .bss  初始化为0的,或者未初始化的数据  普通的全局变量未初始化在COM中
    
  3. 汇编:

    		翻译成二进制,生成各个段(secation),生成符号表
    			    中间文件的组成 EBL
    
  4. 连接:

    			合并各个段,调整段的起始位置以及大小
    	    合并符号表,进行符号解析,给每个符号分配虚拟地址
    

    只会解析GLOBAL符号,不解析LOACL符号(static)

    		给符号分配虚拟地址是根据4G的虚拟地址空间 
    符号重定位为=》》 在.text中所有使用到符号的位置都替换符号分配的虚拟地址
    

    c++支持重载,c不支持重载 原因=》》

调试gdb

  • RElease 和 Debug版本的区别

     Debug版本称之为调试版本——程序自己用的版本
    					其中添加了很多的调试信息,用户单步执行
    					这个版本的执行文件稍微大一点
    			
    	RElease版本称之为发行版本———用户使用的版本
    

gcc与g++的区别

  1. gcc如果编译的是 .c 文件,则按照c语言的语法规则编译。如果编译的是 .cpp文件,则按照c++的语法规则编译。
              g++不管是.c还是.cpp都是按照c++的语法规则进行编译
 2. gcc漠然不会链接c++的库,但g++会!

makefile和make

  • makefile与程序代码没有关系,与项目的功能实现没有关系

  • makefile 的好处:自动化编译,一次写好,永久使用!提高工作效率, 提高编译效率(每次只需要编译修改的文件,未修改的不需要重新编译)

  • make 命令的作用就是识别,解析makefile文件,执行其命令。来完成整个编译过程;

makefile 文件的编译规则

  • 对于makefile 文件就是在linux 上创建文件名为makefile 或Makefile 文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值