2011-09-04 4 views
19

Quiero usar CPU_SET, que es una macro específica de glibc linux que debe definirse en sched.h La página de manual indica claramente que _GNU_SOURCE se debe definir para que se defina la macro. Sin embargo, al mirar el encabezado, CPU_SET se define solo si se define __USE_GNU (existe una protección #ifdef). Me parece recordar hace unos años que se necesitaba _GNU_SOURCE._GNU_SOURCE y __USE_GNU

Preguntas:

1) Es evidente que la página de manual está apagado. ¿Cómo notifico al mantenedor que la página de manual es incorrecta?

2) ¿Cuándo la transición de _GNU_SOURCE a __USE_GNU suceda (ya sea en términos de la versión o el tiempo)

3) ¿Hay circunstancias en las que las nuevas versiones de glibc todavía utilizan _GNU_SOURCE? ¿O puedo suponer con seguridad que la definición de __USE_GNU es suficiente?

Respuesta

27

_GNU_SOURCE es el único que debe definir usted mismo. __USE_GNU se define internamente a través de un mecanismo en features.h (que está incluido en todas las demás cabeceras glibc) cuando se define _GNU_SOURCE, y posiblemente en otras condiciones. La definición o indefinición de __USE_GNU romperá gravemente los encabezados glibc.

+0

Aún recibo errores si utilizo '_GNU_SOURCE' solamente. ¿Alguna otra idea de por qué podría suceder? –

+4

Todas las macros de prueba de características como '_GNU_SOURCE' ** deben ** definirse antes ** se incluye ** cualquier encabezado estándar **. No puede esperar para definirlo hasta justo antes del encabezado para el que lo necesita. –

+0

Terminé por tener que definir '_GNU_SOURCE' en la línea superior del archivo de encabezado más interno, pero funcionó :) –

6

tiene que definir_GNU_SOURCE antes que nada. Este fragmento funciona aquí:

#define _GNU_SOURCE 
#include <sched.h> 


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