-pthread和-lpthread在编译时的区别
编译multithreading程序时使用的gcc -pthread
和gcc -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
)设置标志。
而
链接在链接时存在,预处理时不会有影响。