编译时-pthread 标志的重要性

在各种多线程 C 和 C + + 项目中,我看到 -pthread标志应用于编译和链接阶段,而其他人根本不使用它,只是将 -lpthread传递到链接阶段。

没有编译和链接到 -pthread标志是否有危险-也就是说,-pthread实际上是做什么的?我主要对 Linux 平台感兴趣。

104680 次浏览

试试:

gcc -dumpspecs | grep pthread

寻找任何以 %{pthread:开头的东西。

在我的计算机上,这会导致文件用 -D_REENTRANT编译,并与 -lpthread链接。在其他平台上,情况可能有所不同。使用 -pthread实现最大的可移植性。

在 GNUlibc 上使用 _REENTRANT可以改变一些 libc 头的工作方式。作为一个特定的例子,它使得 errno调用一个返回线程本地位置的函数。

来自 man gcc:

- Pthread 添加对 pthread 多线程的支持 图书馆,这个 选项为预处理器和链接器设置标志。