共享目标文件是一种由链接编辑器创建并通过指定 -G 选项生成的输出形式。在以下示例中,共享目标文件 libfoo.so.1 根据输入文件 foo.c 生成。
$ cc -o libfoo.so.1 -G -K pic foo.c
共享目标文件是一个不可分割的单元,根据一个或多个可重定位目标文件生成。共享目标文件可以与动态可执行文件绑定在一起以形成可运行进程。顾名思义,共享目标文件可供多个应用程序共享。由于这种潜在的深远影响,因此与先前章节相比,本章更深入地介绍了这种链接编辑器输出形式。
对于要绑定到动态可执行文件或其他共享目标文件的共享目标文件,首先它必须可用于链接编辑所需的输出文件。在此链接编辑过程中,会解释所有输入共享目标文件,就像已将这些共享目标文件添加到要生成的输出文件的逻辑地址空间。共享目标文件的所有功能均可供输出文件使用。
所有输入共享目标文件都将成为此输出文件的依赖项。此输出文件中维护了少量簿记信息以描述这些依赖项。运行时链接程序将在创建可运行进程的过程中解释此信息并完成这些共享目标文件的处理。
以下各节详述了如何在编译环境和运行时环境中使用共享目标文件。运行时链接中介绍了这些环境。