当我们编译一个在其中实现线程的C程序时,我们编写此语句。
我不明白为什么我们在这里使用-D_REENTRANT。
例如gcc t1.c -lpthread -D_REENTRANT
答案 0 :(得分:10)
实际上,在GCC中使用线程编译的推荐方法是使用-pthread
选项。它相当于-lpthread -D_REENTRANT
所以你实际上没有问题。
标志执行以下操作:
-lpthread
指示链接器使用适当的库版本来实现线程兼容性。
-D_REENTRANT
告诉编译器使用线程使用所需的声明(函数,类型......)。
答案 1 :(得分:5)
你不必写它。但建议这样做。
Defining _REENTRANT
使编译器在C库中使用多个函数的线程安全(即可重入)版本。
答案 2 :(得分:3)
gcc
等编制者使用-D
name
将name
预定义为定义为1
的宏。
在程序源代码和头文件中,您将看到检查_REENTRANT
的编译器指令,并在此宏为true
或1
时执行某些操作。
如果此宏未传递给编译器,则编译器指令_REENTRANT
将为false
或0
。
从/usr/include/features.h获取此示例。
#if defined _REENTRANT || defined _THREAD_SAFE
# define __USE_REENTRANT 1
#endif
如果定义了_REENTRANT,您将看到它告诉编译器该怎么做。
最后,您必须再次链接代码pthread
库,以便pthread_*()
pthread_create()
,pthread_join()
使用-lpthread
系列。
当libpthread.so
传递给链接器时,代码会与{{1}}链接。