it-swarm.cn

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

据我了解,它们是库,但是两者之间有什么区别?

70
Erik B

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

55
ajk

接下来,.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。 (可悲的是,最后一部分似乎无法在更现代的系统上运行。这并不是很大的损失。)

29
Hack Saw