linux - 我需要 -D_REENTRANT 和 -pthreads 吗?

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

在使用 pthreads 时是否仍需要这样做?

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

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

当我使用 -pthread gcc 选项时,我可以看到 _REENTRANT 被定义。从命令行省略 -D_REENTRANT 是否会产生任何影响,例如,是否可以在没有多线程支持的情况下编译某些对象,然后将其链接到使用 pthread 的二进制文件中并会导致问题?

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

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

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

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

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

最佳答案

对我来说,最好的答案是来自 pts 的评论,只要他愿意提交它作为答案:

You investigated properly and answered your own question. Use g++ -pthread, it is equivalent to g++ -lpthread -D_REENTRANT. Using g++ -D_REENTRANT would be different, it may not set all the linker flags. – pts May 18 at 0:30

https://stackoverflow.com/questions/875789/

相关文章:

linux - 如何使用 sed 通过灵活的键和值更改我的配置文件?

linux - Bash:在文件中的特定位置插入一行

linux - 如何判断文件是否在/bin/sh 中超过 30 分钟?

php - 如何在 Ubuntu 14.04 上更改 php-cli 版本?

c - 绑定(bind)失败 : Address already in use

mysql - 用于数据库备份的 Linux shell 脚本

linux - BASEDIR 环境变量未正确定义

linux - 如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js

ruby-on-rails - 如何在 Linux 上使用 Ruby 2.0 改进 unicorn

java - Ubuntu 上 Java 应用程序中的丑陋字体