.a 和 .so 文件有什么区别?

.a 和 .so 文件有什么区别?

据我了解它们是图书馆,但是两者有什么区别?

答案1

文件.a是静态库,而.so文件是共享对象(动态)库,类似于 Windows 上的 DLL。有一些关于两者之间差异的详细信息这一页

答案2

接下来,.a 文件是“ar”存档。与 tar 存档不同,它存储 .o 或目标文件,允许将它们从存档中提取出来,并链接到程序等。如果需要,您可以使用 ar 来存储其他文件。

您可以使用 -t 参数获取 ar 文件的成员列表,例如:

ar -t /usr/lib/libc.a

.so 文件是一个“共享对象”文件,并且具有更多可供链接器使用的信息,以便可以将成员尽快链接到加载程序。

例如,尝试:

objdump -T /lib/libc-2.11.1.so

(或者 /lib 目录中的 libc.so 的任何版本。)请注意,.so 文件也可能只包含一个链接器脚本,指示它在其他地方查找该文件,或使用其他内容。

有趣的是,.so 文件也可以是一个完整的程序。例如,尝试运行/lib/libc.so.6。 (这适用于我的 Ubuntu 20.04 系统)

相关内容