《手把手教你构建自己的 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 负责将指定的目录 ...
随机推荐
- Marginalize
在David M.Blei 的Distance Dependent Chinese Restaurant Processes 中提到:DDCRP 的一个重要性质,也是和dependent DP 的一个 ...
- django用户认证的session的应用
from django.shortcuts import render,redirect def login(request): if request.method=='GET': return re ...
- node + multer存储element-ui上传的图片
说明 element-ui的Upload组件可以帮助我们上传我们的图片到我们的服务器,可以使用action参数上传图片,也可以使用http-request自定义上传方式.这里我们使用自定义的方式上传. ...
- 1、通过CP数据文件的方式恢复MySQL 从库 启动后报错:Last_IO_Errno: 1236:A slave with the same server_uuid/server_id as this slave has connected to the master;
1.问题: MySQL从库中查看主从状态: show slave status\G,发现出现IO的报错: Last_IO_Errno: Last_IO_Error: Got fatal error f ...
- YUM安装软件提示[Errno 14] curl#6 - "Could not resolve host: mirrors.cloud.aliyuncs.com; 未知的错误"
报错如下: 翻译过来就是 所以问题很简单: 第一种情况:本地DNS服务错误 第二种情况:远程主机挂了 第三种情况:远程主机地址配置错误 第一种解决方法:换DNS 首先验证一下是不是本地DNS错误 从上 ...
- STM32系列之新建工程模板(三)
今天,我将记录STM32如何新建一个模板步骤 第一步:首先先新建一个文件夹(英文命名的)——作为工程根目录 第二步;在文件夹中新建一个名为USER的子目录文件 第三步:点击 MDK 的菜单:Proje ...
- OpenCV3入门(五)图像的阈值
1.图像阈值与二值化 阈值是一种简单的图像分割方法,一幅图像包括目标物体(前景).背景还有噪声,要想从数字图像中直接提取出目标物体,可以设定一个像素值即阈值,然后用图像的每一个像素点和阈值做比较,给出 ...
- Mplayer另类在线播放影音文件技巧【转】
http://www.linuxsir.org/bbs/showthread.php?t=254467 本文介绍的Mplayer在线播放的方法,不是指在浏览器中安装Mplayer插件这种方法,而是在命 ...
- 家用联通光纤开启IPv6
前提是地区运营商支持提供IPv6地址,并且是用联通光猫进行拨号上网. 原文在我的开源中国博客 https://my.oschina.net/finchxu/blog/3165614 注意,阅读以下内容 ...
- Bash 脚本中的 set -euxo pipefail
有些开发人员会用Bash来实现很复杂的功能,就像使用别的高级语言一样.他可能觉得自己很牛逼但其他人早就想锤爆他了,Bash的可读性和可维护性远远低于任何高级语言.更要命的是,Bash并没有方便的调试工 ...