彻底理解链接器
一切围绕三个问题开始

undefined reference to ABC

GitHub里面有很多很棒的项目
不管是直接下载发布版还是自己编译
最终都会得到几个以.so或者.a为结尾的文件
(Windows下为DLL文件或者lib文件)

怎么把这些.so或者.a文件引入你自己的项目

什么是:

静态链接库 动态链接库 静态链接 动态链接

解决这几个问题的关键就是这篇文章要介绍的链接器(Linker)
集成开发环境IDE如Visual Studio已经对程序员屏蔽了大部分链接器的工作
理解链接器将极大提高你对工程的驾驭能力

what is a linker

首先是linker 的本质:
linker 本质上也是一个程序
其次是linker 的输入:
经常使用的程序比如播放器,其输入是一个MP4文件
而linker 的输入是编compiler编译好的目标文件(object file)
最后是linker 的输出:
linker 将目标文件打包后,生成或者可执行文件,或者库,或者目标文件

链接器的作用类似于WinRAR(Linux下是tar)
将一堆文件打包压缩成一个压缩文件
而链接器和压缩软件的区别在于
链接器是将多个目标文件打包成一个文件而不进行压缩