multithreading gcc thread-safety pthreads compiler-flags

multithreading - Diferencia entre-pthread y-lpthread durante la compilación



gcc thread-safety (2)

-pthread Agrega soporte para multihilo con la biblioteca pthreads. Esta opción establece indicadores tanto para el preprocesador como para el enlazador ( man gcc ).

mientras

-lpthread existe mientras que el enlace no tendrá influencia durante el preprocesamiento.

¿Cuál es la diferencia entre gcc -pthread y gcc -lpthread que se utiliza al compilar programas multiproceso?


-pthread le dice al compilador que enlace en la biblioteca pthread y configure la compilación para los hilos.

Por ejemplo, a continuación se muestran las macros que se definen cuando se -pthread opción -pthread en el paquete GCC instalado en mi máquina 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

El uso de la opción -lpthread solo hace que la biblioteca pthread se vincule, las macros predefinidas no se definen.

En -pthread : debe usar la opción -pthread .

Nota: la opción -pthread está documentada como una opción específica de la plataforma en los documentos de GCC, por lo que podría no estar siempre disponible. Sin embargo, está disponible en plataformas en las que los documentos de GCC no lo mencionan explícitamente (como i386 y x86-64); debe usarlo cuando esté disponible.

También tenga en cuenta que GCC ha usado otras opciones similares, como -pthreads (enumerados como sinónimo de -pthread en Solaris 2) y -mthread (para compatibilidad con subprocesos específicos de MinGW en i386 y x86-64 en Windows). Tengo entendido que GCC está tratando de pasar a usar -pthread uniformemente en el futuro.