2017-08-05 4 views
0

Ich habe einen Fall, in dem es zwei Bibliotheken lib1 und lib2 gibt. lib2 hat Abhängigkeiten zu lib1. In meinem Fall ist lib2 im Grunde genommen ein Wrapper auf hoher Ebene um die Funktionen in lib1 herum. Die letzte Anwendung wird nur Funktionen von lib2 verwenden, indem Sie den entsprechenden Header hinzufügen. Wie baue ich die Bibliotheken statisch und verknüpfe sie mit dem endgültigen Programm?statische Bibliothek aufbauen, die von einer anderen statischen Bibliothek abhängt

Antwort

5

Statische Bibliotheken sind nur Archive von Objektdateien (.o), sodass Sie keine eingebetteten Abhängigkeitsinformationen haben können. Etwas wie ar cr lib1.a foo.o bar.o [more object files] wird Ihre Bibliotheken erstellen.

Da es keine Abhängigkeitsinformation ist, Ihr Hauptprogramm hat beide die Bibliotheken zu verknüpfen und es ist wichtig lib1nachlib2 zu verknüpfen, wenn lib2 auf lib1 abhängt (sonst der Linker nicht die Symbole finden, die ungelöst sind in lib2). Ein Verknüpfungsschritt könnte daher wie folgt aussehen (Sie gcc und Ihre Bibliotheken sind im aktuellen Verzeichnis vorausgesetzt):

gcc -otest main.o -L. -Wl,-Bstatic -l2 -l1 
+0

+1 ich das gleiche dachte aber aufgrund weniger Erfahrung in C ich nicht beantwortet haben. (Y) –

+0

@rici der Linker ist nicht im Anwendungsbereich des Standards. Hier geht es um den GNU-Linker. Sie können bei Bedarf die gleiche Bibliothek * zweimal * in einem Aufruf auflisten. –

+0

Für Bibliotheken ist es möglich, sie zweimal in der Befehlszeile zu platzieren: '-l1 -l2 -l1' behandelt Referenzen in beide Richtungen, einschließlich der gegenseitigen Rekursion. – rici

Verwandte Themen