如果共享库始终通过归档库进行处理,则在共享库中记录 soname 是基本机制。
归档文件可以根据一个或多个共享库生成,并可用于生成动态可执行文件或共享库。可以从归档文件中提取共享库来满足链接编辑的要求。与处理可重定位的目标文件(串联成要创建的输出文件)不同,从归档文件中提取的任何共享库都将记录为依赖项。有关归档文件提取条件的更多详细信息,请参见归档处理。
归档成员的名称由链接编辑器构造,并且由归档文件名称和归档文件中的目标文件串联而成。 例如:
$ cc -o libfoo.so.1 -G -K pic foo.c $ ar -r libfoo.a libfoo.so.1 $ cc -o main main.o libfoo.a $ dump -Lv main | grep NEEDED [1] NEEDED libfoo.a(libfoo.so.1) |
由于具有此串联名称的文件无法在运行时存在,因此,在共享库中提供 soname 是生成依赖项有意义运行时文件名的唯一方法。
运行时链接程序不会从归档文件中提取目标文件。因此,在上一示例中,必须从归档文件中提取所需的共享库依赖项并使其可用于运行时环境。