En Linux (kernel 2.6.5) nuestro sistema de compilación llama a gcc con -D_REENTRANT
.¿Necesito -D_REENTRANT con -pthreads?
¿Esto todavía se requiere al usar pthreads
?
¿Cómo se relaciona con la opción gcc -pthread
? Entiendo que debería usar -pthread
con pthreads, ¿todavía necesito -D_REENTRANT
?
En una nota al margen, ¿hay alguna diferencia que sepa entre el uso de REENTRANT entre gcc 3.3.3 y gcc 4.x.x?
Cuando uso -pthread
opción gcc puedo ver que _REENTRANT
se define. Omitir -D_REENTRANT
desde la línea de comandos hace la diferencia, por ejemplo, ¿podrían compilarse algunos objetos sin soporte multiproceso y luego vincularse en binario que utiliza pthreads y causará problemas?
supongo que debe ser aceptable sólo para usar:g++ -pthread
> echo | g++ -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1
Estamos compilar varias bibliotecas estáticas y aplicaciones que enlazan con las bibliotecas estáticas, ambas bibliotecas y pthreads de uso de aplicaciones.
Creo que era necesario en algún momento del pasado, pero quiero saber si todavía es necesario. Google no ha devuelto ninguna información reciente que mencione D_REENTRANT
con pthreads
. ¿Podría indicarme enlaces o referencias sobre el uso en la versión más reciente de kernel/gcc/pthread?
Aclaración: en este momento estamos usando -D_REENTRANT y -lpthread, supongo que puedo reemplazarlos con solo g ++ -pthread, mirando man gcc establece los indicadores tanto para el preprocesador como para el enlazador. ¿Alguna idea?
Investiguaste correctamente y respondiste a tu propia pregunta. Use 'g ++ -pthread', es equivalente a' g ++ -pthread -D_REENTRANT'. El uso de 'g ++ -D_REENTRANT' sería diferente, no puede establecer todos los indicadores del enlazador. – pts
Hm así que es 'g ++ -D_REENTRANT -lpthread' o' g ++ -pthread', ¿ambas formas tienen el mismo efecto? – stefanB
Use -pthread, not -lpthread. La opción -pthread establece todos los indicadores necesarios para enhebrar, sin importar en qué plataforma estés. Usar -lpthread solo se vincularía en libpthread, lo que puede no ser suficiente para algunas plataformas. (Por ejemplo, OpenBSD solía no tener libpthread --- usó libc_r en su lugar.) –