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?

39
demandé sur jww 2009-05-18 04:01:21

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. Utiliser g++ -D_REENTRANT serait différent, il peut ne pas définir tous les indicateurs de l'éditeur de liens. – pts 18 mai à 0: 30

17
répondu stefanB 2014-06-11 16:45:27

À 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}
7
répondu bdonlan 2009-05-18 02:18:32

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

5
répondu Stobor 2009-05-18 02:42:45