_GNU_SOURCE和__USE_GNU

时间:2011-09-04 01:54:24

标签: c++ c linux gnu glibc

我想使用CPU_SET,这是一个glibc linux特定的宏,应该在sched.h中定义。该联机帮助页明确指出必须定义_GNU_SOURCE以便定义宏。但是,查看标题时,CPU_SET仅在定义__USE_GNU时才会定义(有#ifdef后卫)。我似乎记得几年前需要_GNU_SOURCE

问题:

1)显然,联机帮助页已关闭。如何通知维护者该联机帮助页不正确?

2)何时发生从_GNU_SOURCE__USE_GNU的转换(无论是版本还是时间)

3)是否存在较新版本的glibc仍然使用_GNU_SOURCE的情况?或者我可以安全地假设定义__USE_GNU就足够了吗?

2 个答案:

答案 0 :(得分:29)

_GNU_SOURCE是您应该自己定义的唯一一个。在__USE_GNU定义features.h时,_GNU_SOURCE内部通过__USE_GNU中的机制定义{{1}},并且可能在其他条件下定义{{1}}。自己定义或取消定义{{1}}会严重破坏glibc标题。

答案 1 :(得分:8)

你必须先修改_GNU_SOURCE。这段代码在这里工作:

#define _GNU_SOURCE
#include <sched.h>


int main()
{
    cpu_set_t set;
    CPU_SET(0, &set);
    return 0;
}