जब g स्थिर रूप से pthread को लिंक करता है, जिससे सेगमेंटेशन दोष होता है, तो क्यों?
स्थैतिक लिंकिंग में, लिंकर पहले प्रतीक पर ही रुक जाएगा, यहां तक कि यदि वह कमजोर है, और मजबूत की तलाश करना बंद कर देता है। इसे सभी प्रतीकों को देखने के लिए मजबूर करने के लिए (जैसा कि यह गतिशील रूप से लिंक की गई लाइब्रेरी के लिए होता), ld - संपूर्ण-संग्रह विकल्प का समर्थन करता है।
निम्न आदेश काम करेगा:
g -o one one.cpp -Wall -std=c 11 -O3 -static -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
यहां क्या हो रहा है:
ईएलएफ फ़ाइल प्रारूप में कमजोर और मजबूत प्रतीकों की अवधारणा है। डिफ़ॉल्ट रूप से, किसी ऑब्जेक्ट फ़ाइल में प्रतीक मजबूत होते हैं। लिंकिंग के दौरान, एक मजबूत प्रतीक उसी नाम के कमजोर प्रतीक को ओवरराइड कर सकता है।ग्लिबैक और पाथ्रेड्स के मामले में, वे कमजोर प्रतीकों का उपयोग करते हैं। उदाहरण के लिए, POSIX द्वारा fputc को थ्रेड-सुरक्षित होना आवश्यक है और इसे सिंक्रनाइज़ करने की आवश्यकता है, जो महंगा है। एकल-थ्रेडेड वातावरण में, आप इन लागतों का भुगतान नहीं करना चाहते हैं। इसलिए एक कार्यान्वयन सिंक्रोनाइज़ेशन फ़ंक्शंस को खाली स्टब्स के रूप में कार्यान्वित कर सकता है, और फ़ंक्शंस को कमजोर प्रतीकों के रूप में घोषित कर सकता है। यह नियत नहीं था। मल्टी-थ्रेडिंग लाइब्रेरी को लिंक करते समय, लिंकर स्टब्स को वास्तविक सिंक्रोनाइज़ेशन फ़ंक्शंस (मजबूत प्रतीकों के रूप में परिभाषित और थ्रेडिंग-लाइब्रेरी द्वारा कार्यान्वित) द्वारा प्रतिस्थापित कर सकता है।
इसे उदाहरण प्रोग्राम पर लागू करनाLibc.a लाइब्रेरी में __pthread_mutex_lock एक कमजोर प्रतीक के रूप में है, और libpthread.a लाइब्रेरी में यह एक मजबूत प्रतीक के रूप में है। गतिशील रूप से लिंक करते समय, लिंकर कमजोर प्रतीक को मजबूत प्रतीक से बदल देता है। हालाँकि, स्थिर रूप से लिंक करते समय, आपको उसी शब्दार्थ को लागू करने की आवश्यकता होती है। इसीलिए -Wl,--संपूर्ण-संग्रह -lpthread -Wl,--संपूर्ण-संग्रह की आवश्यकता नहीं है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3