2017-01-02 2 views
-1

Ich beginne mit Multi-Thread-Programmierung mit gcc unter Debian 8. Ich habe erfolgreich geschrieben und führen Sie eine Multi-Threading-Test-App (foobar.c), aber ich bin verwirrt durch das Makefile (von einem Beispiel kopiert). Insbesondere der Befehl, der funktioniert, istgcc Argumente: -pthread. Was tut es?

gcc foobar.c -o foobar -pthread 

Ich bin verwirrt von "-Pthread". das heißt

(a) eine Option "-p" mit dem Wert "Faden" oder
(b) ein Argument "-pthread"?

Wenn ja, was macht es eigentlich? Einschließlich einer Bibliothek? Ein Objekt mit einbeziehen? Eine andere Option einstellen?

BTW - Eine ähnliche Frage 15929739 wurde gefragt, aber nie beantwortet. Frage 20924412 war auch nicht hilfreich.

+0

Bezug nehmen d: http://stackoverflow.com/q/23250863/694576 – alk

Antwort

2

Vom man page:

-pthread
Fügt Unterstützung mit der Bibliothek pThreads für Multithreading. Diese Option legt Flags für den Präprozessor und den Linker fest.

zu spezifisch sein, wie von GCC 6.2.1, -pthread wird:

  • #define _REENTRANT 1
  • -lpthread hinzufügen gegen verlinkt libpthread

Wie kann ich wissen, fragen Sie ?

Welche Preprozessor-Flags werden hinzugefügt?

Lassen Sie uns dump the preprocessor defines und vergleichen sie:

$ diff <(gcc -dM -E - < /dev/null) <(gcc -pthread -dM -E - < /dev/null) 
> #define _REENTRANT 1 

Welche Linker-Optionen hinzugefügt werden?

Lassen Sie uns dump the ld options passed by GCC und vergleichen sie:

diff <(gcc -### -o foo empty.c 2>&1) <(gcc -### -pthread -o foo empty.c 2>&1) 

Der Ausgang ist hier etwas ausführlicher, aber wenn wir die temporären Dateinamen Unterschiede ignorieren, finden wir:

  • -lpthread
  • "-plugin-opt=-pass-through=-lpthread"
+0

Ja, das sehe ich aber immer noch unklar. Was ist für den Präprozessor definiert? Was ist verlinkt? Tut mir leid, dass ich so ein Dummy bin. – DontPanic

+0

Hoffentlich beantworten meine Bearbeitungen Ihre Frage. –