Was ist der Unterschied zwischen gcc -pthread
und gcc -lpthread
, der beim Kompilieren von Multithread-Programmen verwendet wird?Unterschied zwischen -pthread und -lpthread beim Kompilieren
Antwort
-pthread
weist den Compiler an, in der PThread-Bibliothek zu verknüpfen sowie die Kompilierung für Threads zu konfigurieren.
Zum Beispiel zeigt die folgende, die Makros, die definiert werden, wenn die -pthread
Option auf dem GCC-Paket auf meinem Ubuntu-Rechner installiert verwendet wird:
$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1
Mit der -lpthread
Option bewirkt, dass nur die pthread-Bibliothek verknüpft werden - Die vordefinierten Makros werden nicht definiert.
Fazit: Sie sollten die -pthread
Option verwenden.
Hinweis: Die -pthread
Option ist als plattformspezifische Option in der GCC-Dokumentation dokumentiert, so dass es möglicherweise nicht immer verfügbar sein. Es ist jedoch auf Plattformen verfügbar, für die die GCC-Dokumente es nicht explizit auflisten (z. B. i386 und x86-64). Sie sollten es verwenden, wenn es verfügbar ist.
Beachten Sie auch, dass andere ähnliche Optionen, die von GCC verwendet wurden, wie -pthreads
(als Synonym für aufgeführt -pthread
auf Solaris 2) und -mthread
(für MinGW spezifische Thread-Unterstützung auf i386 und x86-64 Windows). Mein Verständnis ist, dass GCC versucht, -pthread
einheitlich vorwärts gehen zu verwenden.
Was komisch ist, weil es direkt POSIX widerspricht. POSIX schreibt vor, dass die Übergabe von "-lpthread" ausreicht, um die gesamte POSIX-Threading-Bibliothek zu erhalten. – fuz
@FUZxxl Wenn "-lpthread" übergeben wird, erhält * die gesamte POSIX-Threading-Bibliothek. – immibis
@immibis Nein, was ich meine ist, POSIX sagt, dass die Verbindung mit '-lpthread 'ausreichen sollte, um volle Pthreads-Unterstützung zu erhalten. Es sollten keine weiteren Kompilierungsflags benötigt werden. – fuz
-pthread
Fügt Unterstützung für Multithreading mit der Pthreads-Bibliothek hinzu. Diese Option setzt Flags für den Präprozessor und den Linker (man gcc
).
während
-lpthread
kommt in Existenz, während es die Verknüpfung wird kein Einfluss während der Vorverarbeitung sein.
Hoppla, ja. Hier ist das korrekte Duplikat: http://stackoverflow.com/q/2127797/694576 – alk
Mögliches Duplikat von [Bedeutung von -pthread Flag beim Kompilieren] (https://stackoverflow.com/questions/2127797/gcc-significance-of -thread-flag-when-compiling) – jww