From 1cc22e34e3927ba5a5d1a2597477cbf7b2745db1 Mon Sep 17 00:00:00 2001 From: Lion Chan Date: Thu, 5 Jul 2018 00:53:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=96=E8=AF=91=E5=8E=9F?= =?UTF-8?q?=E7=90=86=E7=9A=84=E9=83=A8=E5=88=86=E5=86=85=E5=AE=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter2 C与C++/2.3 编译原理.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Chapter2 C与C++/2.3 编译原理.md b/Chapter2 C与C++/2.3 编译原理.md index db5ecb2..52da512 100644 --- a/Chapter2 C与C++/2.3 编译原理.md +++ b/Chapter2 C与C++/2.3 编译原理.md @@ -1,3 +1,15 @@ # 2.3 编译原理 -## 2.3.1 编译与连接 \ No newline at end of file +很多人误以为编译是一个过程,实际上,编译一个 C/C++ 程序分为编译和链接两个过程。 + +## 2.3.1 编译与连接 + +编译型语言的源码是不能被直接执行的,只有满足特定处理器架构要求的机器码才能被 CPU 执行。将程序源码转变成机器码的过程称为编译。 + +通常,一个编译后的程序仍然是不能独立执行的,人们还引入了静态链接库、动态链接库、共享库等,程序需要依赖于这些库才能运行。更多的时候则是依赖于,来自于同一项目的其他源码文件所对应的程序。 + +一旦程序编译分为了两个步骤,我们就要区分在编译程序过程中产生的问题,是在哪个步骤中出现的。这样能方便我们更好的定位问题。例如:在编译过程中,找不到某个符号的定义,那么很有可能是忘记了引用相关的头文件,或是忘记了声明;而如果是在编译过程中找不到某符号,则有可能是忘记通过给编译器增加参数,来告诉编译器要链接哪个库了。 + +## 2.3.2 链接库 + +本文不打算更深入的讲解编译和链接的原理,但是静态库、动态库、共享库等内容确实值得进行一些介绍。 \ No newline at end of file