Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译时-pthread标志的重要性 在各种多线程C和C++项目中,我看到了>pTrx/Cuth>Fig应用到编译和链接阶段,而其他人根本不使用它,只是通过 -LpTox链接阶段。_C++_C_Linux_Pthreads - Fatal编程技术网

编译时-pthread标志的重要性 在各种多线程C和C++项目中,我看到了>pTrx/Cuth>Fig应用到编译和链接阶段,而其他人根本不使用它,只是通过 -LpTox链接阶段。

编译时-pthread标志的重要性 在各种多线程C和C++项目中,我看到了>pTrx/Cuth>Fig应用到编译和链接阶段,而其他人根本不使用它,只是通过 -LpTox链接阶段。,c++,c,linux,pthreads,C++,C,Linux,Pthreads,不使用-pthread标志编译和链接是否存在任何危险,即-pthread实际上做什么?我主要对Linux平台感兴趣。试试: gcc -dumpspecs | grep pthread 并查找以%{pthread:开头的任何内容 在我的计算机上,这会导致使用-D_REENTRANT编译文件,并与-lpthread链接。在其他平台上,这可能有所不同。使用-pthread可实现最大的可移植性 在GNU libc上使用\u REENTRANT,会改变某些libc头的工作方式。作为一个具体示例,它使er

不使用
-pthread
标志编译和链接是否存在任何危险,即
-pthread
实际上做什么?我主要对Linux平台感兴趣。

试试:

gcc -dumpspecs | grep pthread
并查找以
%{pthread:
开头的任何内容

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


在GNU libc上使用
\u REENTRANT
,会改变某些libc头的工作方式。作为一个具体示例,它使
errno
调用一个函数,返回线程本地位置。

来自
man gcc

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


一般来说,这可能不仅仅是
errno
和预处理。我不确定这篇文章在实践中与gcc优化有多大关系,但我肯定对其中的深度评论印象深刻。我不认为errno示例是正确的。即使没有-pthread标志或可重入定义,我的errno.h(glibc 2.10.1)和gcc(amd64上的4.4.1)生成errno处理的动态调用,并且不会链接到符号地址。@Andy-您的gcc版本可能会自动提供
-D_REENTRANT
-pthread
。使用
g++-v
运行您的构建,它会转储大量关于编译器前端实际传递给哪些参数的输出
cc1plus
ld
。这里还有一个问题没有回答:不编译并链接-pthread标志——即-pthread实际做什么——有什么危险吗?@natenho
-pthread
在不同的平台上做不同的事情,但它们都以某种方式使pthread工作。因此,省略
-pthread
可能会导致pthreads无法工作(或无法可靠工作),或者对于已经启用了pthreads支持的平台来说,它可能不会起任何作用。我看到一些人将
-lpthread
改为,有什么区别吗?我们应该更喜欢
-pthread