一尘不染

我需要带有-pthreads的-D_REENTRANT吗?

linux

在Linux(内核2.6.5)上,我们的构建系统使用调用gcc -D_REENTRANT

使用时仍然需要pthreads吗?

它与gcc -pthread期权有什么关系?我知道我应该-pthread与pthreads一起使用,还需要-D_REENTRANT吗?

附带说明一下,您在gcc 3.3.3和gcc 4.xx之间使用REENTRANT有什么区别吗?

当我使用-pthreadgcc选项时,可以看到已_REENTRANT定义。-D_REENTRANT从命令行省略是否会有所不同,例如某些对象可以在没有多线程支持的情况下进行编译,然后链接到使用pthreads的二进制文件中,这会引起问题吗?

我认为应该可以使用: g++ -pthread

> echo | g++          -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1

我们正在编译与静态库链接的多个静态库和应用程序,库和应用程序都使用pthreads。

我认为过去在某个阶段需要它,但想知道是否仍然需要它。谷歌搜索没有返回任何新的信息提-
D_REENTRANTpthreads。您能否指向我讨论最近版本的 kernel / gcc / pthread 使用的链接或参考?

澄清:目前,我们正在使用-D_REENTRANT和-lpthread,我想我可以仅用g ++ -pthread替换它们,看着man
gcc它设置了预处理器和链接器的标志。有什么想法吗?


阅读 313

收藏
2020-06-02

共1个答案

一尘不染

对我而言,最好的答案是来自pts他的评论,只要他不愿意将其作为答案提交:

您进行了适当的调查,并回答了自己的问题。使用g++ -pthread,就相当于g++ -lpthread -D_REENTRANT。使用g++ -D_REENTRANT会有所不同,它可能不会设置所有链接器标志。– pt 5月18日0:30

2020-06-02