multithreading - 编译时-pthread和-lpthread之间的区别

标签 multithreading gcc thread-safety pthreads compiler-flags

编译多线程程序时使用的gcc -pthreadgcc -lpthread有什么区别?

最佳答案

-pthread告诉编译器在pthread库中链接以及为线程配置编译。

例如,以下内容显示了在我的Ubuntu计算机上安装的GCC软件包上使用-pthread选项时定义的宏:

$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc          -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt 
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1

使用-lpthread选项只会导致pthread库被链接- undefined 预定义的宏。

底线:您应该使用-pthread选项。

注意:-pthread选项在GCC文档中被记录为特定于平台的选项,因此可能并不总是可用。但是,它在GCC文档未明确列出它的平台上可用(例如i386和x86-64)-您应该在可用时使用它。

还要注意,GCC还使用了其他类似选项,例如-pthreads(在Solaris 2上作为-pthread的同义词列出)和-mthread(对于i386和x86-64 Windows上的MinGW特定的线程支持)。我的理解是,GCC正在尝试统一使用oj​​it_code。

关于multithreading - 编译时-pthread和-lpthread之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60677077/

相关文章:

c++ - C/C++中的 `_dl_init`(程序初始化)执行是单线程的吗?

java - Spring mongoTemplate线程安全吗?

multithreading - 如何将对堆栈变量的引用传递给线程?

java - 我如何使用 wait/notifyAll

gcc - 如何使用单个 GCC(交叉)编译器(交叉)编译为 ARM 硬浮点和软浮点 (softfp)?

c++ - C++ (gcc) 中是否有等效的 TryParse?

重新定义 C 宏

在纯c中,在线程中更改数组/结构/..的部分而不阻塞整个事情

c# - 多线程网络爬虫线程数限制

c++ - 套接字编程中的多个请求/响应