1. 所有源代码一起编译阶段
最早每段程序指定内存地址,库函数和应用程序放在一起每次重新整体编译。
库函数都是以源文件形式存在,而非二进制文件。
缺点:整体编译非常慢。
2. 库函数单独编译输出二进制件,然后加载到指定的内存地址位置。再加载编译过的应用程序。
缺点:难以扩展,内存碎片化
3. 链接加载器——生成可定位的二进制文件
由加载器加载到内存的指定位置,并且保存函数的元数据,将函数的引用与函数的定义链接起来。
缺点:随着程序的膨胀,加载链接周期长。
4. 链接器
将加载和链接分离,链接器可以输出已经完后外部链接的、可以重定位的二进制文件,这种文件可以由一个支持重定位的加载器迅速加载到内存中。使得程序员可以用缓慢的链接器生产出可以很快进行多次加载的可执行文件。
参考:《架构整洁之道》——组件