TEMP_FAILURE_RETRY和__USE_GNU

Sla*_*ish 5 c

我在使用GCC的Ubuntu 10.04上,我想使用宏TEMP_FAILURE_RETRY,如下所述:

http://www.gnu.org/s/hello/manual/libc/Interrupted-Primitives.html

但是,当我编译时,我收到以下错误:

undefined reference to `TEMP_FAILURE_RETRY'
Run Code Online (Sandbox Code Playgroud)

我查看了unistd.h,其中定义了宏,并且前面是:

#ifdef __USE_GNU
Run Code Online (Sandbox Code Playgroud)

如何让我的代码编译和使用这个宏?我可以在代码中使用相同的#ifdef __USE_GNU将其包装起来吗?

Mac*_*ade 7

__USE_GNU 是一个内部宏,所以你不应该自己定义它.

但您可以_GNU_SOURCE在代码中或编译时(使用-D选项)定义.

我认为定义这个将有助于TEMP_FAILURE_RETRY提供.

  • `#define _GNU_SOURCE 1`是规范形式.它需要高于*all*系统标题,否则它将无效.但是,如果您想要可移植性,请定义自己的包装宏; `TEMP_FAILURE_RETRY`是一个GNU libc扩展,AFAIK不能从任何其他C库中获得,包括Linux上的常见替代品(uclibc,klibc,Android都有,......) (6认同)