2016-11-24 1 views
3

Wie kann man für eine statische Bibliothek (.a-Datei) die Abhängigkeiten auf Modulebene auflisten?Wie Abhängigkeiten von C/C++ statische Bibliothek auflisten?

Ich weiß für eine gemeinsam genutzte Bibliothek (.so), können wir objdump oder readelf, dies zu tun:

objdump -p test.so 

oder

readelf -d test.so 

ich so etwas wie

bekommen

ERFORDERLICH libOne.so

ERFORDERLICH libc.so.6

Aber für eine statische Bibliothek, kann ich die Abhängigkeiten in Symbolebene erhalten nur, zum Beispiel durch

objdump -T test.a 

läuft Ich werde einige Sache bekommen wie:

00000000 DF UND 00000000 QByteArray :: mid (int, int) const

00000000 DF UND 00000000 QUrl :: fromEncoded (QByteArray const &)

00000000 DF UND 00000000 QFileInfo :: filename() const

Aber ich brauche die Informationen in Modulebene, weiß jemand, wie man diese Informationen bekommt?

Antwort

3

Eine statische Bibliothek haben keine solche Liste von Abhängigkeiten.

Eine statische Bibliothek ist nichts anderes als ein Archiv von Objektdateien. Und da Objektdateien nicht wissen, auf welche Bibliotheken sie angewiesen sind, kann auch keine statische Bibliothek.

+1

Ich würde sagen, der Grund dafür ist, dass die statische Bibliothek nicht ** verknüpft ** ist. Daher war bisher niemand in der Baukette dafür verantwortlich, solche Informationen hinzuzufügen. –

+0

@Jan Smrčina @Some Programmierer dude Aber wie kann eine statische Bibliothek generiert werden, ohne diese Informationen zu kennen? Zum Beispiel verwendet Bibliothek A eine Funktion, die in einer anderen Bibliothek B definiert ist. Wenn wir nicht etwas wie #include "B.h" hinzufügen, kann A erzeugt werden? Können wir in diesem Fall sagen, dass A von B abhängt? – bagebb

+0

@bagebb Genau wie jede andere Objektdatei. Der Befehl 'ar', mit dem statische Bibliotheken erstellt werden, ist ein einfacher und sehr einfacher * ARchiver *. Bei statischen Bibliotheken liegt es an Ihnen, die Abhängigkeiten zu verfolgen und explizit mit ihnen zu verknüpfen. Es ist nichts, zu dem der Linker in der Lage ist, sondern lediglich die Objektdateien zu extrahieren und mit ihnen zu verknüpfen. –

Verwandte Themen