-lpthread-Option von gcc

8

Wie ich weiß, wenn ich pthread Bibliothek in der Linux-Umgebung verwenden will, muss ich pthread.h einschließen und den Quellcode mit der Option -lpthread kompilieren. Aber ich verstehe nicht, warum ich mit der Option -lpthread kompilieren sollte. Ich denke, die Option ist redundant ... weil ich bereits deklariert habe, pthread.h Header-Datei zu enthalten, so dass gcc Links Pthread-Bibliothek. Warum verknüpft gcc die pthread-Bibliotheksdatei nicht automatisch durch Lesen von #include?

Vielen Dank im Voraus.

    
sky 17.02.2012, 16:24
quelle

6 Antworten

17

Nun Verknüpfung und Kompilierung sind zwei getrennte Phasen.

Sie fügen den Header pthread.h ein, damit der Compiler die Datentypen & amp; Symbolnamen, die Sie in Ihren Quelldateien verwenden, die jedoch in der Headerdatei der pthread-Bibliothek definiert sind.

Mit -lpthread stellen Sie eine Verbindung zur pthread-Bibliothek her, damit der Linker diese Symbole in der pthread-Bibliothek während der Verknüpfungsstufe finden kann.

    
Alok Save 17.02.2012, 16:26
quelle
3

Weil GCC keine automatische Verknüpfung von Bibliotheken durchführt, die durch Header-Include ausgelöst werden (im Gegensatz zu MSVC, oder so wurde mir gesagt).

    
Fred Foo 17.02.2012 16:26
quelle
2

Wenn #include <pthread.h> in Ihrem Code enthalten ist, wird keine Verknüpfung in der Bibliothek hergestellt. Es enthält nur den Header für die Kompilierung. Dadurch kann der Compiler die verschiedenen enthaltenen Strukturen, Funktionsdeklarationen usw. sehen. Wenn -lpthread tatsächlich verwendet wird, wird die Verknüpfung vom Linker ausgeführt. Das Include teilt dem Compiler also mit, was verfügbar ist, und -lpthread erlaubt dem Programm tatsächlich, die Funktionen innerhalb der Bibliothek zur Laufzeit aufzurufen.

    
Dan Fego 17.02.2012 16:27
quelle
2

Die Header-Datei erklärt nur, was die Pthread-Funktionen sind und wie sie aufgerufen werden sollen. -lpthread verweist auf die Bibliothek selbst und enthält die eigentlichen Funktionen.

Der Compiler hat keine Ahnung, wie Sie die Funktionen in pthread.h auflösen werden. Vielleicht möchten Sie eine statische Bibliothek verwenden, die vom System zur Verfügung gestellt wird, eine kompatible Implementierung - zum Glück können Sie sie selbst in einer anderen Quelldatei implementieren. Es hängt vom Linker ab und betrifft nicht den Compiler.

    
James McLaughlin 17.02.2012 16:26
quelle
1

Mit den Header-Dateien teilen Sie dem Compiler mit, welche Funktionen er sehen wird. Wenn sich diese Funktionen jedoch in einer externen Bibliothek befinden, wie die pthread -Funktionen, müssen Sie diese Bibliothek mit Ihrem Programm verknüpfen, damit sie tatsächlich auf diese Funktionen zugreifen kann. Das macht -lpthread .

    
DarkDust 17.02.2012 16:28
quelle
1

Pthread.h Header-Datei ist im Posix-Thread-Programm enthalten, aber Sie brauchen   -lpthread beim Kompilieren, da es mit der Bibliothek von Pthread verknüpft ist HINWEIS: -lpthread -lpcap all sind die Switches mit GCC-Compiler, die bestimmte Bibliotheken in unserem Quellcode verlinken können. (lpthread bedeutet "link pthread" -Bibliothek)

    
Rahul Raina 14.05.2015 10:20
quelle

Tags und Links