gcc 参数:-pthread。它有什么作用?

gcc arguments: -pthread. What does it do?

我开始在 Debian 8 下使用 gcc 进行多线程编程。我已经成功地编写了 运行 一个多线程测试应用程序 (foobar.c),但是我被 Makefile 混淆(从一个例子中复制)。特别是,有效的命令是

gcc foobar.c -o foobar -pthread

我对“-pthread”感到困惑。是

(a) 值为 "thread" 或
的选项“-p” (b) 参数“-pthread”?

无论哪种情况,它实际上在做什么?包括一些图书馆?包括一些对象?设置其他选项?

顺便说一句 - 类似的问题 15929739 was asked but never answered. Question 20924412 也没有帮助。

来自man page

-pthread
Adds support for multithreading with the pthreads library. This option sets flags for both the preprocessor and linker.

具体来说,从 GCC 6.2.1 开始,-pthread 将:

  • #define _REENTRANT 1
  • -lpthread 添加到 link 反对 libpthread

你问我怎么知道的?

添加了哪些预处理器标志?

让我们dump the preprocessor defines比较一下:

$ diff <(gcc -dM -E - < /dev/null) <(gcc -pthread -dM -E - < /dev/null)
> #define _REENTRANT 1

添加了哪些 linker 选项?

让我们dump the ld options passed by GCC比较一下:

diff <(gcc -### -o foo empty.c 2>&1) <(gcc -### -pthread -o foo empty.c 2>&1)

这里的输出有点冗长,但如果我们忽略临时文件名差异,我们会发现:

  • -lpthread
  • "-plugin-opt=-pass-through=-lpthread"