Wie weiß ein Linker, was alle Bibliotheken verknüpfen müssen?

8

Von Ссылка

Woher weiß der Linker, dass er die Standard-Laufzeitbibliothek enthalten muss und zum Beispiel die Definitionen der Funktionen, die in iostream deklariert sind, nirgendwo anders vorhanden sind?

Gibt es eine Zuordnung, die den Verknüpfungsprozess erleichtert?

Umzufassen - Wenn ich eine Datei mit nur Funktionsdeklarationen einschließe, wie findet ein Linker heraus, wo die Funktionsdefinitionen sind?

    
Lazer 12.02.2012, 11:50
quelle

2 Antworten

5

Wenn Sie g++ verwenden, verbindet immer die Standard-C ++ - Bibliothek ( -lstdc++ ).

Um es zu umgehen, können Sie gcc verwenden und eine andere Bibliothek verknüpfen.

Bearbeiten: Der Linker findet nichts irgendetwas . Die Standardbibliothek ist automatisch verknüpft, so dass für die Standardfunktionen nichts zu erkennen ist. Wenn Sie nur etwas deklarieren, das nicht in STL ist und versuchen, es ohne die tatsächliche Definition zu verwenden, wird der Linker fehlschlagen. Sie müssen die Bibliothek manuell verknüpfen / .o.

    
Karoly Horvath 12.02.2012, 12:03
quelle
5

Dies ist nur eine der Standardeinstellungen für Ihren Linker. Im Allgemeinen können Sie nicht sagen, die Standardbibliotheken zu verknüpfen, wenn Sie sie nicht verwenden möchten.

Und Sie immer müssen dem Linker explizit mitteilen, dass er in zusätzlichen Bibliotheken, die Ihre Anwendung verwendet, verlinken soll. Es wird nicht "herausfinden", wo die Funktionsdefinitionen ausschließlich auf den enthaltenen Deklarationen basieren.

    
Cody Gray 12.02.2012 12:13
quelle