增加编译原理的部分内容。

This commit is contained in:
Lion Chan 2018-07-05 00:53:06 +08:00
parent 03a7c0a9d1
commit 1cc22e34e3
1 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,15 @@
# 2.3 编译原理
## 2.3.1 编译与连接
很多人误以为编译是一个过程,实际上,编译一个 C/C++ 程序分为编译和链接两个过程。
## 2.3.1 编译与连接
编译型语言的源码是不能被直接执行的,只有满足特定处理器架构要求的机器码才能被 CPU 执行。将程序源码转变成机器码的过程称为编译。
通常,一个编译后的程序仍然是不能独立执行的,人们还引入了静态链接库、动态链接库、共享库等,程序需要依赖于这些库才能运行。更多的时候则是依赖于,来自于同一项目的其他源码文件所对应的程序。
一旦程序编译分为了两个步骤,我们就要区分在编译程序过程中产生的问题,是在哪个步骤中出现的。这样能方便我们更好的定位问题。例如:在编译过程中,找不到某个符号的定义,那么很有可能是忘记了引用相关的头文件,或是忘记了声明;而如果是在编译过程中找不到某符号,则有可能是忘记通过给编译器增加参数,来告诉编译器要链接哪个库了。
## 2.3.2 链接库
本文不打算更深入的讲解编译和链接的原理,但是静态库、动态库、共享库等内容确实值得进行一些介绍。