2016-07-07 60 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選項控制它是否查找靜態或動態庫以及在哪裏查找它。