ZHCADC4A September 2011 – March 2014
系统在其支持的动态链接模型方面各不相同。在 UNIX 系统(包括 Linux)中,动态链接旨在从应用程序的角度来看是透明的。也就是说,可编写和编译程序或库,而不考虑是否静态或动态地解析任何未解析的引用。例如,如果程序声明“extern int f()”,然后调用 f,则编译器会生成能够静态或动态解析 f 的代码。这种方法的主要优点是灵活性:可以编写和编译程序,而无需考虑其将如何链接。主要缺点是效率可能比较低,因为编译器必须假设可能无法静态解析任何外部引用,并且生成适合的寻址代码来支持动态链接。
UNIX 将动态链接的库称为动态共享对象或 DSO。
在 Windows 和各种嵌入式系统(例如 Symbian 和 PalmOS)中,动态链接是通过语言扩展(通常是 _ _declspec(import))在符号声明的源代码中显式指定的。这种方法的优点是编译器明确知道何时生成所需特殊寻址。这些系统通常具有链接后阶段,该阶段用符号索引方案来替代通过符号引用的动态链接。这些系统将共享库称为动态链接库或 DLL。