2014-04-23 13 views
73

Qual è la differenza tra gcc -pthread e gcc -lpthread che viene utilizzata durante la compilazione di programmi multithreading?Differenza tra -pthread e -lpthread durante la compilazione

+2

Oops, sì. Ecco il duplicato corretto: http://stackoverflow.com/q/2127797/694576 – alk

+0

Possibile duplicato di [Significance of -pthread flag durante la compilazione] (https://stackoverflow.com/questions/2127797/gcc-significance-of -pthread-flag-when-compiling) – jww

risposta

87

-pthread indica al compilatore di collegarsi alla libreria pthread e configurare la compilazione per i thread.

Ad esempio, il seguente mostra la macro che vengono definite quando l'opzione -pthread si abitua sul pacchetto GCC installato sulla mia macchina 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 

Utilizzando l'opzione -lpthread fa sì che solo la libreria pthread da collegare - le macro predefinite non vengono definite.

Bottom line: è necessario utilizzare l'opzione -pthread.


Nota: l'opzione -pthread è documentata come opzione specifica piattaforma nella documentazione GCC, quindi potrebbe non essere sempre disponibile. Tuttavia, è disponibile su piattaforme che i doc del GCC non lo elencano esplicitamente (come i386 e x86-64) - dovresti usarlo quando disponibile.

Si noti inoltre che le altre opzioni simili sono state usate da GCC, come ad esempio -pthreads (indicato come sinonimo di -pthread su Solaris 2) e -mthread (per il supporto filo MinGW-specifici su i386 e x86-64 di Windows). La mia comprensione è che GCC sta cercando di passare a utilizzare -pthread in modo uniforme andando avanti.

+2

Che è strano perché contraddice direttamente POSIX. POSIX stabilisce che passare '-lpthread' è sufficiente per ottenere l'intera libreria di threading POSIX. – fuz

+0

@FUZxxl Passare '-lpthread' * fa * ottenere l'intera libreria di threading POSIX. – immibis

+3

@immibis No, cosa intendo dire, POSIX dice che il collegamento con '-lpthread' dovrebbe essere sufficiente per ottenere il pieno supporto di pthreads. Non dovrebbero essere necessari altri flag di compilazione. – fuz

4

-pthread Aggiunge il supporto per il multithreading con la libreria pthreads. Questa opzione imposta i flag sia per il preprocessore che per il linker (man gcc).

mentre

-lpthread viene in esistenza durante il collegamento non ci sarà alcuna influenza durante la pre-elaborazione.

Problemi correlati