关于编译:关于编译的重要概念总结
回忆初学编程的时候,大部分人都是从C语言开始学起的,除了一些常见的语法和思维,一些基础知识经常被人们疏忽,如果没有及时地进行梳理,可能短时间内没有太大的影响,然而在日后碰到这些问题时仍旧一头雾水。例如C语言是一门编译型语言,编译型语言首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。对于编译型语言,绕不过的就是编译器。 上面提出几个问题,无妨思考一下: 什么是GNU什么是GCC / G++什么是MinGW-w64C++ 规范有哪些?次要区别是什么?Makefile是什么?cmake是什么?如果脑海中没有一个整体的概念框架的话,正如那张图,一个全副武装的骑士,尽管防护的很好,然而对于编译器的基础知识把握的不牢,就像头盔上的一个缝隙,可能下一箭正中缝隙,败下阵来。 上面具体介绍这几个概念: 什么是GNUGNU 是一个打算或者叫静止。在这个旗号下成立了 FSF,起草了 GPL 等。 GNU操作系统是一种由自由软件形成的类 Unix 操作系统,该零碎基于 Linux 内核,指标在于建设一个齐全相容于UNIX的自由软件环境。 过后Unix 零碎开始免费和商业闭源了。针对这一景象,Richard Stallman发动了 GNU 打算,模拟 Unix 的界面和应用形式,从头做一个开源的版本。他本人做了编辑器 Emacs 和编译器 GCC。接下来开发者实现了包含外围的 gcc 和 glibc。然而 GNU 零碎短少操作系统内核。原定的内核叫 HURD,始终完不成。同时 BSD(一种 UNIX 发行版)陷入版权纠纷,x86 平台开发暂停。这时 Linus 为了在 PC 上运行 Unix,在 Minix 的启发下,开发了Linux。当然 Linux 只是一个零碎内核,系统启动之后应用的依然是 gcc 和 bash 等软件。Linus 在公布 Linux 的时候抉择了 GPL,因而合乎 GNU 的主旨。也补救了GNU在这方面的短少,于是合在一起打包公布叫 GNU / Linux。而后省掉了后面局部,变成了 Linux 零碎。实际上 Debian,RedHat 等 Linux 发行版中内核只占了很小一部分容量。 参考:https://www.gnu.org/gnu/gnu-linux-faq.html 什么是GCC / G++GCC(GNU编译器套件):GNU Compiler Collection。能够编译C、C++、JAVA、Fortran、Pascal、Object-C、Ada等语言。 ...