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

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

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文件类型:

  • 可重定位的目标文件
  • 可执行的目标文件
  • 可被共享的目标文件
发布了38 篇原创文章 · 获赞 58 · 访问量 3645
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览