在 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_REENTRANT
和 pthreads
的最新信息。您能否指出一些链接或引用来讨论最近版本的 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 tog++ -lpthread -D_REENTRANT
. Usingg++ -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/