2016-07-07 8 views
0

Ich wurde eine statische Bibliotheksdatei ('.a' Datei) geteilt. Als ich es mit 7z öffnete, enthielt es zwei Dateien, eine ohne Erweiterung und eine mit .o Erweiterung. Was sind diese Dateien? Ist die .o eine Objektdatei hier und welche dieser Dateien ist beim Verknüpfen tatsächlich verlinkt.Inhalt einer .a statischen Bibliotheksdatei

Mehr Infos über die .a-Datei: Ermöglicht die Datei xyz.a nennen: Wenn ich un komprimieren oder es mit 7z sehen, ich zwei Dateien sehen können: - xyz - abc.o

+0

Haben Sie die gleichen Dateien, wenn Sie mit 'ar (1)' ('ar x file.a') extrahieren? Haben Sie 'file (1)' benutzt, um mehr Informationen über diese Dateien zu erhalten? – blatinox

Antwort

0

Die Datei '.a' kann mehrere '.o' Dateien enthalten, die vom Dienstprogramm ar hinzugefügt wurden. Es kann auch einen Index enthalten, der globale Symbole den '.o' Dateien zuordnet, die sie enthalten. Auf einigen Systemen (meist auf SysV- oder GNU-Basis) wird die ar Option s verwendet, um den Index zu aktualisieren. Auf anderen Systemen (meist auf BSD-Basis) wird der Index von einem separaten ranlib-Dienstprogramm aktualisiert.

Um Ihre Fragen zu beantworten, sind die '.o' Dateien die Objekt (Code) Dateien, die die Bibliothek bilden, die andere Datei ist der Index, und einige Untergruppen der '.o' Dateien werden durch die Linker, mit Hilfe des Index zu bestimmen, welche '.o' Dateien benötigt werden.

Mit dem ld Linker würde die Option -l foo nach einer dynamischen Bibliothek namens libfoo.so oder einer statischen Bibliothek namens libfoo.a suchen. Andere ld Optionen steuern, ob sie nach einer statischen oder dynamischen Bibliothek suchen und wo sie gesucht werden soll.