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

时间:2017-01-02 16:10:32

标签: multithreading gcc pthreads compiler-flags

我开始使用Debian 8下的gcc进行多线程编程。我已经成功编写并运行了一个多线程测试应用程序(foobar.c),但我对Makefile感到困惑(从一个复制而来例)。特别是,有效的命令是

gcc foobar.c -o foobar -pthread

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

(a)选项“-p”,其值为“thread”或
(b)论证“-pthread”?

如果是这两种情况,它究竟在做什么?包括一些图书馆?包括一些对象?设置一些其他选项?

BTW - 提出了类似的问题15929739,但从未回答过。问题20924412也没有帮助。

1 个答案:

答案 0 :(得分:2)

来自man page

  

<强> -pthread
  使用pthreads库添加对多线程的支持。此选项为预处理器和链接器设置标志。

具体而言,从GCC 6.2.1开始,-pthread将:

  • #define _REENTRANT 1
  • 添加-lpthread以链接libpthread

你问我怎么知道这个?

添加了哪些预处理程序标志?

让我们dump the preprocessor defines并比较它们:

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

添加了哪些链接器选项?

让我们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"