• 《手把手教你构建自己的 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 进行优化。
  • 相关阅读:
    IOS7 UI设计的十大准则
    IOS8-人机界面指南
    Android应用切换皮肤功能实现
    Android 打造自己的个性化应用(五):仿墨迹天气实现续--> 使用Ant实现zip/tar的压缩与解压
    Android 打造自己的个性化应用(四):仿墨迹天气实现-->自定义扩展名的zip格式的皮肤
    Android 打造自己的个性化应用(三):应用程序的插件化
    Android 打造自己的个性化应用(二):应用程序内置资源实现换肤功能
    Android 打造自己的个性化应用(一):应用程序换肤主流方式的分析与概述
    Android防止内存泄漏以及MAT的使用
    Android内存泄漏监测(MAT)及解决办法
  • 原文地址:https://www.cnblogs.com/0x1D/p/4729851.html
Copyright © 2020-2023  润新知