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

标签 linux gcc 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

关于linux - 我需要 -D_REENTRANT 和 -pthreads 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/875789/

相关文章:

c++ - rdtsc 计时器在 linux 中不准确吗?

linux - 如何在 linux bash/shell 中对图像进行 base64 编码

gcc - gcc 选项 -pthread 是什么意思?

c - pthreads 向特定线程发出信号

linux - Strace 多线程程序

linux - 需要帮助解决 Ubuntu Linux 上的 FTP 问题

c - 有编译命令吗?

compilation - GCC 预处理器输出中的调试信息

c++ - 如何在 linux 中分析 pthread 互斥锁?

c - 保护共享数据并共享同一堆栈