《手把手教你构建自己的 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 负责将指定的目录 ...
随机推荐
- XGBoost原理学习总结
XGBoost原理学习总结 前言 XGBoost是一个上限提别高的机器学习算法,和Adaboost.GBDT等都属于Boosting类集成算法.虽然现在深度学习算法大行其道,但很多数据量往往没有太 ...
- Java 构造方法总结
Java 构造方法总结 ①方法名和 类名相同 ②在方法名的前面没有返回值类型的声明 ③在方法中不能使用return语句返回一个值 ④在创建对象时,要调用new,如:book b1=new book() ...
- try catch finally的理解
定义以及用法: try/catch/finally 语句用于处理代码中可能出现的错误信息. 错误可能是语法错误,通常是程序员造成的编码错误或错别字.也可能是拼写错误或语言中缺少的功能(可能由于浏览器差 ...
- 20190710双人开黑CF模拟赛
Codeforces Round #571 (Div. 2) 日常被tanao_大佬带飞,我AC了A和C(B题没了...否则tanao_大佬肯定把我吊打) A. Vus the Cossack and ...
- 【WPF学习】第三十二章 执行命令
前面章节已经对命令进行了深入分析,分析了基类和接口以及WPF提供的命令库.但尚未例举任何使用这些命令的例子. 如前所述,RoutedUICommand类没有任何硬编码的功能,而是只表达命令,为触发命令 ...
- ROS与激光雷达入门-ROS中使用激光雷达(RPLIDAR)
激光雷达(RPLIDAR) 我这里用的是思岚(rplidar)A1,通过ros系统去驱动激光雷达,现在做了一个基本的入门. RPLIDAR是低成本的二维雷达解决方案,由SlamTec公司的RoboPe ...
- 死磕java(2)
java数据类型 boolean --true--false byte --8位 short --16位 int --32位 long --64位 char float --32位 double -- ...
- Java 接口及接口回调_Chris
题目: 利用接口和接口回调,实现简单工厂模式,当输入不同的字符,代表相应图形时,利用工厂类获得图形对象,再计算以该图形为底的柱体体积. 代码: 1.Test.java /** * 测试类,包含一个主方 ...
- 微信小程序开发技巧总结(二) -- 文件的选取、移动、上传和下载
微信小程序开发技巧总结(二) -- 文件的选取.移动.上传和下载 1.不同类型文件的选取 1.1 常用的图片 视频 对于大部分开发者来说,需要上传的文件形式主要为图片,微信为此提供了接口. wx.ch ...
- java设计模式7——桥接模式
java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...