《后台开发核心技术与应用实践》第四章 读书笔记 编译

《后台开发核心技术与应用实践》第四章 读书笔记 编译

1.编译与链接

在这里插入图片描述

预处理

预处理使.cpp文件预处理成.i文件

g++ -E helloworld.cpp -o helloworld.i

预处理是处理以"#"开头的预编译指令

比如展开宏定义,处理所有的条件预编译指令#if #elif

处理#include指令,过滤注释内容,添加行号和文件名标识

编译

编译就是进行词法分析、语法分析、语义分析、中间代码生成、目标代码生成优化

g++ -S helloworld.i -o helloworld.s

在这里插入图片描述

链接

组装源代码的各个模块,包含了地址空间分配,符号决议和重定位等步骤
在这里插入图片描述

静态链接:编译时绑定,以lib开头,接着是静态库名,以.a为后缀名

动态链接:运行时绑定,以lib开头,以.so为文件扩展名

动态库与静态库的特点:

  • 动态链接库有利于进程间的资源共享。
  • 用静态库,如果库发生变化,使用库的程序要重新编译,用动态库,只要动态库提供给程序的接口没变,只要重新用新生成的动态库替换原来的就可以。
  • 由于静态库在编译的时候,就将库函数装载到程序中去了,动态库函数必须在运行时才被装载,程序在执行的时候,用静态库速度更快。

2.makefile编写

makefile中会定义一系规定,指定哪些文件需要先编译,哪些文件需要后编译。

在这里插入图片描述

第一行是目标文件,第二行依赖,第三行也是依赖,当用户键入make clean时,会删除*.o和helloworld文件

在这里插入图片描述

在这里插入图片描述

3.目标文件

ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储的标准文件格式。

ELF文件类型:

  • 可重定位的目标文件
  • 可执行的目标文件
  • 可被共享的目标文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值