静态链接是指通过链接器将程序中所有必需的库直接复制到可执行文件中。它发生在编译阶段的末尾。
动态链接是在运行时按名称将库复制到可执行文件中的过程。这意味着操作系统只有在程序运行时才会将必要的文件(共享库)加载到内存中。
访问速度
使用静态链接方法时,使用静态链接库,而不是共享库(动态)。静态链接库的加载速度要快得多,而且更具可移植性,因为它们是通过链接器复制到内存中的,不必在运行时出现。然而,对于动态链接的库,只有它们的名称存储在内存中,并且链接过程在运行时发生,同时加载内存和共享库文件。
兼容性
使用静态链接,如果任何程序库发生更改,就不会出现兼容性问题。原因是所有的代码都位于一个可执行模块中。有了动态链接,如果一个库需要更新,它就不再与其他库兼容,并且所有的应用程序都可能需要重新设计/调整才能使程序正常工作。
外部库
如果静态链接程序中的任何外部库发生更改,这将不会影响可执行文件。除非它已经完全重新编译并从头开始重新链接。因此,如果你想让程序确认这些更改,你需要从头开始重置它。
然而,使用动态链接,如果任何共享库发生更改,您只需要“修复”其中一个,因此不需要重新编译整个程序
存储
静态链接文件的大小更大,因为每个外部程序都被转换为可执行文件,因此每个文件都占用了操作系统内存。
但是,动态链接的程序占用的磁盘空间较少,因为可执行文件中只保存了一个共享库的副本。
程序阶段
虽然静态链接发生在编译阶段结束时,由称为链接器的程序执行,但其对应部分发生在操作系统执行的运行时。