我需要-D_REENTRANT和-threads?

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

使用pthreads时,这仍然是必需的吗?

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

在附注中,你知道在gcc 3.3.3和gcc 4.xx之间使用REENTRANT有什么区别吗?

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

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

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

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

我相信这在过去的某个阶段是需要的,但是想知道它是否仍然是必需的。 谷歌search没有返回任何最近的信息提及 – D_REENTRANT pthreads 。 你能指向我的链接或参考讨论在最新版本的内核/ gcc / pthread的使用

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

对我来说,最好的答案就是来自这个pts的评论,如果他只是懒得把它作为答案提交:

你调查得当,回答你自己的问题。 使用g++ -pthread ,它相当于g++ -lpthread -D_REENTRANT 。 使用g++ -D_REENTRANT会有所不同,它可能不会设置所有的链接器标志。 – 5月18日的0点30

从海湾合作委员会的信息页面:

 `-pthread' Adds support for multithreading with the "pthreads" library. This option sets flags for both the preprocessor and linker. 

所以只要-pthread标志就足够了。 但是,我不build议只将它传递给你的一些代码。

正如Chris在评论中所build议的那样,在Linux上使用gcc -dumpspecs确实也确认了它也设置了预处理器标志:

 %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} 

gcc的-pthreads标志设置您所在平台上的pthread支持所需的相关编译器和链接器标志。

你是对的,在Linux x86(也可能是许多其他平台)上,这相当于“-D_REENTRANT -lpthread”,但在所有平台上并不一定如此。

(至less有一段时间,在aix上,-pthread导致g ++链接到一个完全不同的libstdc ++。a。不过现在我不知道现在是不是这种情况)