web-dev-qa-db-fra.com

Différence entre -pthread et -lpthread lors de la compilation

Quelle est la différence entre gcc -pthread et gcc -lpthread qui est utilisé lors de la compilation de programmes multithreads?

92
Vishnuraj V

-pthread Indique au compilateur de créer un lien dans la bibliothèque pthread et de configurer la compilation pour les threads.

Par exemple, ce qui suit montre les macros qui sont définies lorsque l’option -pthread Est utilisée sur le paquet GCC installé sur ma machine Ubuntu:

$ 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

L'utilisation de l'option -lpthread Ne fait que lier la bibliothèque pthread - les macros prédéfinies ne sont pas définies.

En bout de ligne: vous devriez utiliser l'option -pthread.


Remarque: l'option -pthread Est documentée en tant qu'option spécifique à la plate-forme dans la documentation GCC. Il est donc possible qu'elle ne soit pas toujours disponible. Cependant, il est disponible sur les plates-formes pour lesquelles la documentation GCC ne le mentionne pas explicitement (comme i386 et x86-64). Vous devez l'utiliser quand il est disponible.

Notez également que d'autres options similaires ont été utilisées par GCC, telles que -pthreads (Répertorié comme synonyme de -pthread Sous Solaris 2) et -mthread (Pour la prise en charge de threads spécifiques à MinGW sous Windows i386 et x86-64). D'après ce que j'ai compris, GCC essaie de passer à l'utilisation de -pthread De manière uniforme.

104
Michael Burr

-pthread Ajoute la prise en charge du multithreading avec la bibliothèque pthreads. Cette option définit des indicateurs pour le préprocesseur et l'éditeur de liens (man gcc).

tandis que

-lpthread existe en liant il n'y aura pas d'influence lors du prétraitement.

8
Praveen Kumar