《手把手教你构建自己的 Linux 系统》学习笔记(4)
汇编链接器(Binutils)
这是一个软件包,这个软件包其实是一个工具集,里面含有了大量的用于汇编程序活着读取二进制文件相关的程序。
CC
它是一条命令的别名,这条命令的作用是使用 GCC 的 C 语言编译器。
CXX
它是一条命令的别名,用于指定 GCC 的 C++ 编译器。
CFLAGS
用于设置编译 C 程序时传递给编译器的参数。
CXXFLAGS
用于设置编译 C++ 程序的时候传递给编译器的参数。
LDFLAGS
用于设置在链接过程中使用的参数。
如何让 make 命令定向处理指定的目录
使用 make 命令的 -C 参数可以达到这个目的。
-C 参数后面接的目录,是 make 命令处理的对象目录。
make 命令如何使用传递参数的功能?
你可以直接在 make 后面接上你想要使用的参数的键值对,如果以后的编译过程中使用了这个键值对,那么就会直接利用你设定好的参数来进行编译。
例如
make -C ld LIB_PATH=/tools/lib
这条命令的作用是让 make 对 ld 这个目录进行编译,然后如果遇到了 LIB_PATH 这个参数,就直接使用你设置好的值。
GCC 里的编译参数 --disable-nls 是什么意思?
这个命令后面的 nls 的全称是 national language support 的简写,所以他的意思是让 make 不要编译那么多的语言文件,从而使得编译的时间缩短,编译后的文件也会变得更加小。
GCC 的编译过程是怎样的?
首先是系统的 C 语言,编译 GCC 源代码的 C 语言,然后编译 GCC 源代码里的其他语言。
为何会有 GCC Bootstrap 编译方式?
GCC Bootstrap 这种编译方式的产生是处于安全考虑的。
毕竟你如果使用 GCC 来编译你的源代码,如果你的 GCC 编译器出现问题了,那么你编译出来的代码肯定有问题。
所以你需要保证你的 GCC 编译器必须是正确的。
而 GCC Bootstap 这种编译方式又称为「自编译方式」一定程度上是由于他的编译过程比较奇葩。
那么 Bootstrap 编译过程是什么?
首先会使用 GCC 编译 GCC 源代码来产生一个 C 语言编译器。
然后由上一步产生 C 语言编译器,再次编译 GCC 源代码来产生多第二个 C 语言编译器。
然后将这两个 C 语言编译器进行比较,如果相同,就说明这个 GCC 编译器是没有问题的。
然后就由第二个 C 语言编译器来编译其他的代码。
因为他两次编译出来的 C 语言编译器,都是以同一个 GCC 源代码进行编译的,所以这个编译过过程又叫做「自编译」,就是自己编译自己嘛。
如何开启 Bootstrap 编译,又如何关闭?
需要注意的是,早期的 GCC 版本,默认是不进行 Bootstrap 方式进行编译的,需要在编译过程中指定使用该方式,使用 「make bootstrap」来进行编译。
然后 4.3 以上版本默认在本地方式的编译中就开启了该方式,无论使用 make 还是使用 make bootstrap 都是使用 bootstrap 方式来进行编译的,关闭的方法就是在 配置 GCC 的过程中加入「--disable-bootstarp」参数。
Glibc 的作用是什么?
Glibc 是一个 C 库,它里面的库函数的作用就是保证程序可以调用内核的功能。
通过它很多程序可以不经过修改就可以直接移植到 Linux 上,而我们需要做的仅仅是重新编译这个程序。
它也可以运行在一些非 Linux 的内核上,比如 Hurd
GCC 的选项 march 和 mtune 的作用是啥?
march 和 mtune 用于告诉 GCC 编译器如何优化程序。
march 是用于设置应该按照什么架构来进行编译,使得编译出来的程序只要附和这个架构就能够运行。
mtune 是用于设置应该按照什么 CPU 来进行优化编译,如果不设置 mtune 就会自动是使用 march 的设置。
你也可以根据 native 来让 march 和 mtune 自动检测当前的环境来进行优化编译。
比如说,GCC -march=1686 -mtune=pentium4
就是让编译出来的程序能够在符合 1686 架构的平台上运行,同时针对奔腾4 的 CPU 进行优化。
《手把手教你构建自己的 Linux 系统》学习笔记(4)的更多相关文章
- 《手把手教你构建自己的 Linux 系统》学习笔记(10)
目录 /etc/fstab 文件的作用是什么? Linux 内核的图形化启动是怎么回事? Linux 系统中的文件名是否以大小写来进行区别? 「GRUB 中无法找到硬盘」怎么解决? 「GRUB 及配置 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(9)
目录 autoreconf 命令的作用是什么? aclocal automake -a autoconf 一条命令搞完三面三步 既然有其他的「编译控制软件」为何还是使用 make 来进行编译控制? M ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(8)
目录 Binutils 软件包有什么用? make -k 的作用是什么? man-pages 里有几种文档?分别表示什么意思? 如何查询指定目录的 man-pages ? 如何使用 make 命令的同 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(6)
目录 /dev 目录是干什么的? /proc 和 /sys 目录是干什么的? udev 这个软件是干什么用的? 目录映射是临时性的,还是永久性的? 命令行里大括号 "{}" 的作用 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(5)
交叉编译是什么? 交叉编译就是在一个系统上,编译生成另外一个系统运行的程序文件. 「硬件体系结构」和「操作系统」的关系是什么? 硬件体系结构也可以称为架构,主要是通过 CPU 的指令集来进行区分的,操 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(2)
Linux 系统定制原理 虚拟根目录 我们的目标是为了完成目标系统(也就是我们要做的系统),他是一个可以独立运行的系统,不依赖雨主系统和临时系统,根据 Linux 系统的特点它需要存放在根目录下面,但 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(1)
第二章.基础准备--Linux 系统定制原理 Linux 系统的组成及架构 共享库和静态库 在 Linux 系统中,函数库包含两种形式:共享库和静态库. 共享库 共享库在程序运行时,为其提供所需要的函 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(7)
目录 tee 命令的缺陷是什么?如何解决这个缺陷? /etc/ld.so.conf 文件的作用是什么? 动态链接和静态链接有什么不同? 动态编译 静态编译 共享库为什么会有版本?共享库的版本升级原理是 ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(3)
需要注意的是,制作操作系统权限全程都要用 root pushd 和 popd 为了方便目录管理,所以出现了这种两个命令,他们的原理就是利用堆栈来实现目录管理. 这两个命令,pushd 负责将指定的目录 ...
随机推荐
- jdk8中CompletableFuture的各个API用法,极大扩展了Future
就不介绍了,直接贴代码,建议在代码中使用,真的很方便 package cn.hou.completablefuture; import org.junit.Test; import java.util ...
- 强大的Guava中的新集合类型: Multiset, Multimap, BiMap, Table, ClassToInstanceMap, RangeSet, RangeMap等
一 Multiset /** * 新类型集合: Multiset: Multiset就是可以保存多个相同的对象,并且无序 * 占据了List和Set之间的一个灰色地带 * 其他实现: TreeMult ...
- 每日一练_PAT_B1001
鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”.鲁宾逊先生和多多都很开心,因为花生正是他们的最爱.在 ...
- webdriver的常用方法
webdriver的常用方法 click():点击元素 clear():清除文本 send_keys(value):模拟按键输入 # -*- coding:utf-8 -*- from seleniu ...
- [python之路]简单介绍
python介绍 #python是一个什么样的语言?编译型和解释型静态语言和动态语言强类型定义语言和弱类型定义语言python是一门动态解释性的强类型定义语言. #Python的优缺点##优点Pyth ...
- Python - with open()、os.open()、open()的详细使用
读写文件背景 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘. 读写文件就是请求 ...
- k8s系列---hpa扩容
centos-master:172.16.100.60 centos-minion:172.16.100.62 k8s,etcd,docker等都是采用yum装的,部署参考的k8s权威指南和一个视频, ...
- elasticsearch kibana 安装 配置
二.Elasticsearch 配置信息 2.1 因为 Elasticsearch 可以执行脚本文件,为了安全性,默认不允许通过 root 用户启动服务.我们需要新创建用户名和用户组启动服务 2. ...
- prometheus operator(Kubernetes 集群监控)
一.Prometheus Operator 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面 ...
- 前端开发中的一些tips(持续更新)
本文记录分享一些在日常开发中经常遇到的一些问题的解决方案及常用小技巧,如有错误之处还请批评指正.CSS相关:1.如何修改chrome记住密码后自动填充表单的黄色背景? input:-webkit-au ...