Quelle est la différence entre gcc -pthread
et gcc -lpthread
qui est utilisé lors de la compilation de programmes multithreads?
-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.
-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.