在各种多线程C和C ++项目中,我看到-pthread
标志应用于编译和链接阶段,而其他人根本不使用它,只是将-lpthread
传递给链接阶段。
是否存在没有编译和链接-pthread
标志的危险 - 即-pthread
实际上做了什么?我主要对Linux平台感兴趣。
答案 0 :(得分:102)
尝试:
gcc -dumpspecs | grep pthread
并查找以%{pthread:
开头的任何内容。
在我的计算机上,这会导致使用-D_REENTRANT
编译文件,并与-lpthread
链接。在其他平台上,这可能会有所不同。使用-pthread
获得最多的便携性。
在GNU libc上使用_REENTRANT
,改变了一些libc头的工作方式。作为一个具体的例子,它使errno
调用一个返回线程本地位置的函数。
答案 1 :(得分:37)
来自man gcc
:
-pthread 使用pthreads添加对多线程的支持 图书馆。这个 option为预处理器和链接器设置标志。