2011-09-04 5 views
19

मैं CPU_SET है, जो एक glibc linux-विशिष्ट मैक्रो sched.h में परिभाषित किया जाना चाहिए मैनपेज स्पष्ट रूप से कहा गया है कि _GNU_SOURCE ताकि मैक्रो परिभाषित किया गया है परिभाषित किया जाना चाहिए है उपयोग करना चाहते हैं। हालांकि, शीर्षलेख को देखते हुए, CPU_SET केवल तभी परिभाषित किया जाता है जब __USE_GNU परिभाषित किया गया है (#ifdef गार्ड है)। मुझे कुछ साल पहले याद आया कि _GNU_SOURCE की आवश्यकता थी।_GNU_SOURCE और __USE_GNU

प्रश्न:

1) स्पष्ट रूप से मैनपेज बंद है। मैं रखरखाव को कैसे सूचित करूं कि मैनपेज गलत है?

2) जब __USE_GNU को _GNU_SOURCE से संक्रमण हुआ (कोई भी वर्शन या समय) के मामले में

3) वहाँ हालात जहां glibc के नए संस्करण अभी भी _GNU_SOURCE का उपयोग कर रहे हैं? या क्या मैं सुरक्षित रूप से मान सकता हूं कि __USE_GNU परिभाषित करना पर्याप्त है?

उत्तर

27

_GNU_SOURCE केवल एक ही है जिसे आपको कभी परिभाषित करना चाहिए। __USE_GNU को features.h (जो अन्य सभी ग्लिबिक शीर्षकों द्वारा शामिल किया गया है) में एक तंत्र के माध्यम से आंतरिक रूप से परिभाषित किया गया है जब _GNU_SOURCE परिभाषित किया गया है, और संभवतः अन्य स्थितियों के तहत। __USE_GNU को परिभाषित या अपरिभाषित करने से आप ग्लिबैक हेडर को बुरी तरह से तोड़ देंगे।

+0

यदि मैं '_GNU_SOURCE' का उपयोग करता हूं तो मुझे अभी भी त्रुटियां मिलती हैं। कोई अन्य विचार यह क्यों हो सकता है? –

+4

सभी फीचर टेस्ट मैक्रोज़ जैसे कि '_GNU_SOURCE' ** ** ** ** ** ** ** पहले हेडर शामिल होने से पहले परिभाषित किया जाना चाहिए। आप जिस शीर्षलेख के लिए इसकी आवश्यकता है, उसके ठीक पहले तक इसे परिभाषित करने के लिए आप प्रतीक्षा नहीं कर सकते। –

+0

मैंने सबसे आंतरिक शीर्षलेख फ़ाइल की शीर्ष पंक्ति पर '_GNU_SOURCE' को परिभाषित करने के लिए समाप्त किया, लेकिन यह काम किया :) –

6

आपको किसी और चीज से पहले define_GNU_SOURCE करना होगा। यह स्निपेट यहां काम करता है:

#define _GNU_SOURCE 
#include <sched.h> 


int main() 
{ 
    cpu_set_t set; 
    CPU_SET(0, &set); 
    return 0; 
} 
संबंधित मुद्दे