在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会有什么不同,例如,某些对象可以在没有多线程支持的情况下编译,然后链接到使用pthreads的二进制文件并导致问题吗?
我认为应该可以使用: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 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,gcc,pthreads
来源: https://codeday.me/bug/20190925/1817416.html