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"
我开始在 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"