Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.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++项目中,我看到了-pTrand标志应用到编译和链接阶段,而其他的则根本不使用它,只是把-LpToX传递到链接阶段。_C++_C_Linux_Pthreads - Fatal编程技术网

编译时-pthread标志的重要性 在各种多线程C和C++项目中,我看到了-pTrand标志应用到编译和链接阶段,而其他的则根本不使用它,只是把-LpToX传递到链接阶段。

编译时-pthread标志的重要性 在各种多线程C和C++项目中,我看到了-pTrand标志应用到编译和链接阶段,而其他的则根本不使用它,只是把-LpToX传递到链接阶段。,c++,c,linux,pthreads,C++,C,Linux,Pthreads,不使用-pthread标志编译和链接有什么危险吗?即-pthread实际上做什么?我主要对Linux平台感兴趣。试试: gcc -dumpspecs | grep pthread 并查找以%{pthread:开头的任何内容 在我的计算机上,这会导致使用-D_REENTRANT编译文件,并与-lpthread链接。在其他平台上,这可能有所不同。使用-pthread可实现最大的可移植性 在GNU libc上使用_REENTRANT可以改变某些libc头的工作方式。例如,它使errno调用成为返回线

不使用-pthread标志编译和链接有什么危险吗?即-pthread实际上做什么?我主要对Linux平台感兴趣。

试试:

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

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

在GNU libc上使用_REENTRANT可以改变某些libc头的工作方式。例如,它使errno调用成为返回线程本地位置的函数。

来自man gcc:

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


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