लिनक्स पर (कर्नेल 2.6.5) हमारी बिल्ड सिस्टम -D_REENTRANT
के साथ जीसीसी को कॉल करती है।क्या मुझे -D_REENTRANT -pthreads की आवश्यकता है?
क्या यह अभी भी pthreads
का उपयोग करते समय आवश्यक है?
यह gcc -pthread
विकल्प से कैसे संबंधित है? मैं समझता हूं कि मुझे -pthread
का उपयोग pthreads के साथ करना चाहिए, क्या मुझे अभी भी -D_REENTRANT
की आवश्यकता है?
एक तरफ नोट पर, क्या कोई अंतर है जिसे आप जीसीसी 3.3.3 और जीसीसी 4.x.x के बीच रिंटेंट के उपयोग के बीच जानते हैं?
जब मैं -pthread
जीसीसी विकल्प का उपयोग करता हूं तो मैं देख सकता हूं कि _REENTRANT
परिभाषित हो जाता है। कमांड लाइन से -D_REENTRANT
को छोड़कर कोई फर्क पड़ता है, उदाहरण के लिए कुछ ऑब्जेक्ट्स को बहुप्रचारित समर्थन के बिना संकलित किया जा सकता है और फिर बाइनरी में जोड़ा जा सकता है जो pthreads का उपयोग करता है और समस्याएं पैदा करेगा?
मुझे लगता है कि यह सिर्फ उपयोग करने के लिए ठीक होना चाहिए:g++ -pthread
> echo | g++ -E -dM -c - > singlethreaded
> echo | g++ -pthread -E -dM -c - > multithreaded
> diff singlethreaded multithreaded
39a40
> #define _REENTRANT 1
हम कई स्थिर पुस्तकालयों और अनुप्रयोगों है कि स्थिर पुस्तकालयों के साथ लिंक करते हैं, दोनों पुस्तकालयों और आवेदन उपयोग pthreads संकलित कर रहे हैं।
मेरा मानना है कि यह अतीत में किसी चरण में आवश्यक था लेकिन यह जानना चाहता है कि अभी भी इसकी आवश्यकता है या नहीं। Googling ने pthreads
के साथ उल्लेख की गई किसी भी हालिया जानकारी को वापस नहीं किया है। क्या आप मुझे कर्नेल/जीसीसी/पीथ्रेड के हाल के संस्करण में उपयोग पर चर्चा करने वाले लिंक या संदर्भों पर इंगित कर सकते हैं?
स्पष्टीकरण: फिलहाल हम -D_REENTRANT और -lpthread का उपयोग कर रहे हैं, मुझे लगता है कि मैं उन्हें केवल g ++ -pthread के साथ प्रतिस्थापित कर सकता हूं, मैन जीसीसी को देखकर यह प्रीप्रोसेसर और लिंकर दोनों के लिए झंडे सेट करता है। कोई विचार?
आपने सही तरीके से जांच की और अपने स्वयं के प्रश्न का उत्तर दिया। का प्रयोग करें 'जी ++ -pthread', यह' जी ++ -pthread -D_REENTRANT' के बराबर है। 'G ++ -D_REENTRANT' का उपयोग करना अलग होगा, यह सभी लिंकर झंडे सेट नहीं कर सकता है। – pts
हम्म तो यह या तो 'जी ++ -D_REENTRANT -lpthread' या' जी ++ -pthread', दोनों रूप में एक ही प्रभाव है? – stefanB
उपयोग करें -थथ्रेड, नहीं -lpthread। -प्थ्रेड विकल्प थ्रेडिंग के लिए आवश्यक सभी झंडे सेट करता है, भले ही आप किस प्लेटफॉर्म पर हों। -lpthread का उपयोग केवल libpthread में लिंक होगा, जो कुछ प्लेटफ़ॉर्म के लिए पर्याप्त नहीं हो सकता है। (उदाहरण के लिए, ओपनबीएसडी का उपयोग libpthread नहीं था --- इसके बजाय libc_r का उपयोग किया जाता था।) –