静态库和可重定位目标文件之间的区别?

时间:2012-03-16 17:58:45

标签: linux linker static-libraries elf

静态库和可重定位目标文件有什么区别?或者在动态库和共享对象文件之间。

如果它不相等的东西,有什么动态库,允许链接它,但共享对象文件没有?

3 个答案:

答案 0 :(得分:7)

静态库基本上只是一个目标文件的集合。它通常只是目标文件的ar存档。使用ar,您可以从库中提取目标文件,向其中添加不同的目标文件等。

一般来说,动态库和共享对象文件之间的区别是目标--Windows使用动态库,Linux使用共享对象。有一点不同,但不是很多。

答案 1 :(得分:1)

动态(共享)库使用PIC代码 - 无论内存中多个可执行文件使用的库的实际物理位置如何,代码都能正常工作。

静态库在链接阶段链接到可执行文件以创建可执行文件。

动态库的优点是可执行文件在内存中的占用空间较小。静态库的优点是您只需交付可执行文件而无需拥有动态库并且运行速度更快,并且无需任何工作就可以使库存在于物理内存中的任何位置。

答案 2 :(得分:0)

如果多个可执行文件使用分片库,则会节省磁盘空间。如果多个可执行文件使用共享库中的相同功能。正在运行的每个都将获得自己的副本。磁盘上的可执行文件都不包含该函数的代码,而是包含对共享库的引用。