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


Answers:


54

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


18
.a只能在编译期间作为程序的一部分包含在内。 .so可以在程序加载时“导入”。
LawrenceC

2
.a代表什么?
hfrmobile

2
@hfrmobile a代表存档 -静态库是使用该ar实用程序创建的目标文件的集合。更多信息在这里
ajk

28

接下来,.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文件也可以是完整的程序。例如,尝试运行/lib/libc.so.6。(遗憾的是,最后一部分似乎无法在更现代的系统上运行。这并不是很大的损失。)


错别字。你的意思是写ar -t /usr/lib/libc.a。实际上,-在这种情况下,似乎没有必要。也/lib/libc.so.6.只是打印一些输出。我不知道我是否称其为full fledged program
Faheem Mitha

1
从某种意义上说,它是一个完善的程序,它具有供exec查找的主要符号。
哈克锯

2
您还可以ldd在.so上运行,它将向您显示它使用的其他库。静态将返回一条消息,提示它不是动态库。
Marcin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.