Ai - je besoin de-D REENTRANT avec-pthreads?
Sous Linux (noyau 2.6.5) notre système de construction appelle gcc avec -D_REENTRANT
.
Est-ce encore nécessaire lors de l'utilisation de pthreads
?
Comment est-ce lié à l'option gcc -pthread
? Je comprends que je devrais utiliser -pthread
avec pthreads, ai-je toujours besoin de -D_REENTRANT
?
Sur une note de côté, y a-t-il une différence que vous connaissez entre L'utilisation de REENTRANT entre gcc 3.3.3 et gcc 4.x.x ?
Lorsque j'utilise l'option -pthread
gcc, je peux voir que _REENTRANT
est défini. Omettre -D_REENTRANT
de la ligne de commande fait une différence, par exemple, certains objets pourraient-ils être compilés sans support multithread, puis liés en binaire qui utilise pthreads et causera des problèmes?
Je suppose que ça devrait être ok juste pour utiliser: g++ -pthread
> echo | g++ -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1
Nous compilons plusieurs bibliothèques statiques et applications qui sont liées aux bibliothèques statiques, les bibliothèques et les applications utilisent des pthreads.
Je crois qu'il était nécessaire à un moment donné dans le passé, mais je veux savoir si elle est toujours nécessaire. Googling n'a renvoyé aucune information récente mentionnant - D_REENTRANT
avec pthreads
. Pourriez-vous me pointer vers des liens ou des références discutant de l'utilisation dans la version récente de kernel/gcc/pthread?
Clarification: au moment où nous utilisons-d_reentrant et-lpthread, je suppose que je peux les remplacer par juste g++ - pthread, en regardant Man gcc, il définit les drapeaux pour le préprocesseur et l'éditeur de liens. Toutes les pensées?
3 réponses
Pour moi, la meilleure réponse était le commentaire de pts
si seulement il prenait la peine de le soumettre comme réponse:
Vous avez enquêté correctement et répondu votre propre question. Utiliser
g++ -pthread
, il est équivalent àg++ -lpthread -D_REENTRANT
. Utiliserg++ -D_REENTRANT
serait différent, il peut ne pas définir tous les indicateurs de l'éditeur de liens. – pts 18 mai à 0: 30
À partir des pages info gcc:
`-pthread'
Adds support for multithreading with the "pthreads" library. This
option sets flags for both the preprocessor and linker.
Donc, juste l'indicateur-pthread devrait être suffisant. Je ne recommanderais pas seulement de le passer à une partie de votre code, cependant.
Comme Chris l'a suggéré dans les commentaires, l'utilisation de gcc-dumpspecs sur Linux confirme en effet qu'elle définit également des indicateurs de préprocesseur:
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}
L'indicateur-pthreads de Gcc définit les indicateurs du compilateur et de l'éditeur de liens nécessaires à la prise en charge de pthreads sur la plate-forme sur laquelle vous vous trouvez.
Vous avez raison, sur linux x86 (et probablement beaucoup d'autres plates-formes), c'est équivalent à '- d_reentrant-lpthread' mais ce n'est pas nécessairement vrai sur toutes les plates-formes.
(pendant au moins un certain temps, sur aix, -pthread a fait lier g++ dans une libstdc++complètement différente.A. Je ne sais pas si c'est toujours le cas maintenant, cependant...)