Bedeutung des Flags -pthread beim Kompilieren

Lesezeit: 2 Minuten

Bedeutung des Flags pthread beim Kompilieren
leeroy

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.

Bedeutung des Flags pthread beim Kompilieren
Chris Jester-Young

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_REENTRANTund 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.

  • Es kann nicht nur sein errno und Vorverarbeitung im Allgemeinen. Ich bin mir nicht sicher, wie relevant der Artikel ist hpl.hp.com/techreports/2004/HPL-2004-209.pdf ist in der Praxis für gcc-Optimierungen, aber ich war beeindruckt von der Tiefe der Überprüfung dort.

    – Pascal Cuoq

    24. Januar 2010 um 16:53 Uhr

  • Ich glaube nicht, dass das Errno-Beispiel richtig ist. Selbst ohne ein -pthread-Flag oder eine _REENTRANT-Definition generieren meine errno.h (glibc 2.10.1) und gcc (4.4.1 auf amd64) einen dynamischen Aufruf zur Fehlerbehandlung und verknüpfen nicht mit der Symboladresse.

    – Andy Roß

    24. Januar 2010 um 16:56 Uhr

  • @Andy – Ihre Version von gcc ist möglicherweise so aufgebaut, dass sie bereitgestellt wird -D_REENTRANT oder -pthread automatisch. Führen Sie Ihren Build mit aus g++ -v und es wird eine Menge Ausgaben darüber ausgeben, an welche Parameter das Compiler-Front-End tatsächlich übergibt cc1plus und ld.

    – Tom

    24. Januar 2010 um 18:51 Uhr

  • Hier ist noch eine Frage unbeantwortet: Besteht die Gefahr, nicht mit dem Flag -pthread zu kompilieren und zu linken – dh was macht eigentlich -pthread ?

    – Natenho

    14. Juli 2015 um 15:43 Uhr

  • @natenho -pthread macht verschiedene Dinge auf verschiedenen Plattformen, aber alle ermöglichen es pthreads in gewisser Weise, zu funktionieren. Also weglassen -pthread kann dazu führen, dass pthreads nicht funktionieren (oder nicht zuverlässig funktionieren), oder es kann nichts für Plattformen tun, auf denen die pthreads-Unterstützung bereits standardmäßig aktiviert ist.

    – Chris Jester-Young

    14. Juli 2015 um 15:46 Uhr

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.

  • Ich sehe einige Leute setzen -lpthread Was ist stattdessen der Unterschied? Sollen wir lieber -pthread?

    – Paris Qian Sen

    2. Juni 2021 um 13:53 Uhr

  • -pthread impliziert -lpthreadaber nicht umgekehrt. -pthread ist daher eine vollständigere Lösung.

    – Victor Paléologue

    6. September 2021 um 12:50 Uhr

992870cookie-checkBedeutung des Flags -pthread beim Kompilieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy