据我了解它们是图书馆,但是两者有什么区别?
答案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 系统)