-pthread和-lpthread在编译时的区别

编译multithreading程序时使用的gcc -pthreadgcc -lpthread有什么区别?

-pthread编译器在pthread库中链接,并为线程configuration编译。

例如,以下显示了在我的Ubuntu机器上安装的GCC软件包上使用-pthread选项时定义的macros:

 $ 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 

使用-lpthread选项只会导致pthread库被链接 – 预定义的macros不会被定义。

底线:你应该使用-pthread选项。


注意: -pthread选项在GCC文档中被logging为特定于平台的选项,所以它可能并不总是可用的。 但是,在GCC文档没有明确列出的平台上(比如i386和x86-64),它是可用的 – 您应该在可用时使用它。

还要注意GCC已经使用了其他类似的选项,例如-pthreads (在Solaris 2上作为-pthreads的同义词列出)和-mthread (用于在i386和x86-64 Windows上的MinGW特定线程支持)。 我的理解是,海湾合作委员会正试图转向使用-pthread一致前进。

-pthread使用pthreads库添加对multithreading的支持。 该选项为预处理器和链接器( man gcc )设置标志。

链接在链接时存在,预处理时不会有影响。