2016-07-07 48 views
0

我被共享了一个静态库文件('.a'文件)。当我用7z打开它时,它包含两个文件,一个没有扩展名,一个扩展名为.o。这些文件是什么? .o是一个目标文件,它在链接过程中实际链接了这些文件中的哪一个。静态库文件的内容

对某文件更多信息: 让我们命名该文件xyz.a: 当我未压缩或用7z格式查看它,我可以看到两个文件: - XYZ - abc.o

+0

当你用'ar(1)'('ar x file.a')提取时你有相同的文件吗?你用'file(1)'来获得关于这个文件的更多信息吗? – blatinox

回答

0

'.a'文件可以包含由ar实用程序添加的几个'.o'文件。它还可以包含将全局符号映射到包含它们的'.o'文件的索引。在某些系统上(主要是基于SysV或GNU的),ars选项用于更新索引。在其他系统上(大多数基于BSD),该索引由一个单独的ranlib实用程序更新。

为了回答你的问题,'.o'文件是组成库的对象(代码)文件,另一个文件是索引,'.o'文件的一些子集将由链接器,在索引的帮助下确定需要哪些'.o'文件。

对于ld链接器,选项-l foo将搜索名为libfoo.so的动态库或称为libfoo.a的静态库。其他ld选项控制它是否查找静态或动态库以及在哪里查找它。