linux – 静态库(.a)和共享库(.so)之间的文件格式差异?
我知道有很多关于共享和静态库的用例的问题,这个问题与此无关.我问的是存储在磁盘上的文件格式的差异.
为什么问题是,两者之间有什么区别?或者它们是否完全相同,仅在使用方面有所不同? 我认为它们不一样,因为在共享库上运行’nm’需要-D标志.显然,它需要做一些不同的事情.为什么? 它们都是ELF文件吗? 共享库可以包含某些依赖路径的唯一区别是什么? 解决方法
静态库,例如libfoo.a不是任何类型的可执行文件.
它只是 unix ar format中的索引存档
其他文件碰巧是 ELF 目标文件. 像任何存档一样创建静态库: ar crs libfoo.a objfile0.o objfile1.0...objfileN.o 输出新存档(c)libfoo.a,插入那些目标文件(r) 你会听到在程序中链接libfoo.a.这并不意味着 另一方面,共享库,例如,libfoo.so,是一个ELF文件 不要试图怀疑静态库是一种ELF文件 在nm中使用-D选项只是指示工具选择 目标文件,共享库和程序都是ELF格式的变体. ELF格式本身是一个冗长而棘手的技术阅读,是必需的 对于漫长而棘手的技术阅读,请尝试Excutable and Linkable Format (ELF) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |