2011-09-04 6 views
19

chcę użyć CPU_SET, co jest specyficzne dla Linuksa glibc makro, które powinny zostać określone w sched.h manpage wyraźnie stwierdza, że ​​_GNU_SOURCE muszą być zdefiniowane tak, że makro jest zdefiniowany. Jednak patrząc na nagłówek, CPU_SET jest zdefiniowany tylko wtedy, gdy zdefiniowano __USE_GNU (istnieje strażnik #ifdef). Wydaje mi się, że pamiętam kilka lat temu, że potrzebne było _GNU_SOURCE._GNU_SOURCE i __USE_GNU

Pytania:

1) Oczywiście strona podręczna jest wyłączona. Jak powiadomić opiekuna, że ​​strona podręcznika jest niepoprawna?

2) Kiedy przejście od _GNU_SOURCE do __USE_GNU zdarzyć (zarówno pod względem wersji lub czasu)

3) Czy istnieją okoliczności, w których nowsze wersje glibc nadal używają _GNU_SOURCE? Czy mogę bezpiecznie założyć, że zdefiniowanie __USE_GNU jest wystarczające?

Odpowiedz

27

_GNU_SOURCE to jedyny, który należy sam zdefiniować. __USE_GNU jest zdefiniowany wewnętrznie za pomocą mechanizmu w features.h (który jest zawarty we wszystkich innych nagłówkach glibc) po zdefiniowaniu _GNU_SOURCE i prawdopodobnie w innych warunkach. Definiowanie lub nieokreślanie siebie poważnie uszkodzi nagłówki glibc.

+0

Nadal dostaję błędy, jeśli używam '_GNU_SOURCE'. Jakieś inne pomysły, dlaczego tak się stało? –

+4

Wszystkie makra testów cech, takie jak '_GNU_SOURCE' ** muszą ** być zdefiniowane przed ** każdy ** standardowy nagłówek jest zawarty. Nie możesz się doczekać, aż zdefiniujesz go przed samym nagłówkiem, którego potrzebujesz. –

+0

Skończyło się na tym, że zdefiniowałem '_GNU_SOURCE' w górnej linii najbardziej wewnętrznego pliku nagłówkowego, ale zadziałało :) –

6

musisz zdefiniować_GNU_SOURCE przed czymkolwiek innym. Ten fragment kodu działa tutaj:

#define _GNU_SOURCE 
#include <sched.h> 


int main() 
{ 
    cpu_set_t set; 
    CPU_SET(0, &set); 
    return 0; 
} 
Powiązane problemy