In verschiedenen Multithread-C- und C++-Projekten habe ich das gesehen -pthread
-Flag, das sowohl auf die Kompilierungs- als auch auf die Verknüpfungsphase angewendet wird, während andere es überhaupt nicht verwenden und einfach bestehen -lpthread
zur Verknüpfungsphase.
Besteht die Gefahr, die nicht zu kompilieren und zu verknüpfen -pthread
Flagge – dh was tut -pthread
eigentlich tun? Ich interessiere mich hauptsächlich für Linux-Plattformen.
Versuchen:
gcc -dumpspecs | grep pthread
und suchen Sie nach allem, was mit beginnt %{pthread:
.
Auf meinem Computer führt dies dazu, dass Dateien mit kompiliert werden -D_REENTRANT
und verknüpft mit -lpthread
. Auf anderen Plattformen kann dies abweichen. Verwenden -pthread
für die meisten Portabilität.
Verwenden _REENTRANT
, auf GNU libc, ändert die Art und Weise, wie einige libc-Header funktionieren. Als konkretes Beispiel macht es errno
Rufen Sie eine Funktion auf, die einen Thread-lokalen Speicherort zurückgibt.
Von man gcc
:
-pthread Fügt Unterstützung für Multithreading mit der pthreads-Bibliothek hinzu. Diese Option setzt Flags sowohl für den Präprozessor als auch für den Linker.