2011-09-04 4 views
19

Desidero utilizzare CPU_SET, che è una macro specifica per Linux di glibc che deve essere definita in sched.h La pagina di manuale indica chiaramente che è necessario definire _GNU_SOURCE in modo che la macro sia definita. Tuttavia, guardando l'intestazione, CPU_SET è definito solo se è definito __USE_GNU (è presente una protezione #ifdef). Mi sembra di ricordare alcuni anni fa che era necessario il _GNU_SOURCE._GNU_SOURCE e __USE_GNU

Domande:

1) Chiaramente la manpage è spento. Come faccio a comunicare al manutentore che la manpage non è corretta?

2) Quando è avvenuto il passaggio da _GNU_SOURCE a __USE_GNU accadere (sia in termini di versione o tempo)

3) non vi sono circostanze in cui le nuove versioni di glibc utilizzano ancora _GNU_SOURCE? Oppure posso presumere che la definizione di __USE_GNU sia sufficiente?

risposta

27

_GNU_SOURCE è l'unico che si dovrebbe definire. __USE_GNU è definito internamente tramite un meccanismo in features.h (che è incluso da tutte le altre intestazioni di glibc) quando viene definito _GNU_SOURCE ed eventualmente in altre condizioni. Definire o annullare la definizione di __USE_GNU interromperà gravemente le intestazioni degli glibc.

+0

Ho ancora errori se uso solo '_GNU_SOURCE'. Qualche altra idea sul perché potrebbe accadere? –

+4

Tutte le macro di test delle funzioni come '_GNU_SOURCE' ** devono ** essere definite prima di ** qualsiasi ** intestazione standard inclusa. Non puoi aspettare di definirlo fino a poco prima che l'intestazione ti serva. –

+0

Alla fine ho dovuto definire '_GNU_SOURCE' nella riga superiore del file di intestazione più interno, ma ha funzionato :) –

6

devi definire_GNU_SOURCE prima di ogni altra cosa. Questo frammento di lavoro funziona qui:

#define _GNU_SOURCE 
#include <sched.h> 


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