2012-04-30 10 views
5

मेरा प्रोग्राम एक लोडर के रूप में बनाया गया है और कई मॉड्यूल साझा पुस्तकालय हैं। अब उन पुस्तकालयों में से एक pthreads का उपयोग करता है और ऐसा लगता है कि यह मॉड्यूल गतिशील रूप से बाध्य है (स्टार्टअप पर लोड)। अब यह आसान होगा अगर मैं मॉड्यूल फ़ाइल में जोड़ने के लिए pthreads को मजबूर कर सकता हूं। लिनक्स पर जीसीसी, मैं कैसे करूँ? मुझे लगता है कि एक libpthread.a आवश्यक है ....फोर्स जीसीसी को स्थिर-लिंक उदा। pthreads (और गतिशील लिंक नहीं)

+0

इसे बनाने के लिए आपको पर्थ्रेड हेडर को शामिल करने के अलावा अन्य कुछ भी करने के लिए क्या करना है? क्या आपके पास स्रोत का उदाहरण है? क्या एक पूर्ण आवश्यक संकलन की यह विधि है? –

उत्तर

16

साझा पुस्तकालय में libpthread.a को जोड़ने के दौरान सैद्धांतिक रूप से संभव है, यह वास्तव में बुरा विचार है। कारण यह है कि libpthreadglibc का हिस्सा है, और सभीglibcके हिस्सों को बिल्कुल मिलान करना चाहिए, या आप अजीब और अनौपचारिक दुर्घटनाओं को देखेंगे।

तो आपकी साझा लाइब्रेरी में libpthread.a जोड़ने होगा: जब glibc

  • का एक अलग संस्करण के साथ एक मशीन में ले जाया गया

    1. कारण अपने कार्यक्रम के क्रैश होने का कारण अपने मौजूदा कार्यक्रम अपने वर्तमान मशीन के glibc है जब दुर्घटना अपग्रेड किया गया, लेकिन आपका मॉड्यूल अपडेट libpthread.a के विरुद्ध फिर से लिंक नहीं हुआ है।

    अपने आप को उत्तेजित करें, और ऐसा न करें।

  • +0

    : ओ ओह मेरे भगवान ओह मेरे भगवान, अच्छा है कि आप इसे बताते हैं। लेकिन जब glibc का उसका हिस्सा, .../मुझे derped .. – imacake

    +1

    धन्यवाद। उत्तर की तरह। हालांकि एक प्रश्न - यदि libpthread libc/glibc का हिस्सा है, तो इसे एक अलग पुस्तकालय के रूप में क्यों प्रदान किया जाता है। लगभग सभी libs libc के लिए लिंक करते हैं और फिर, libpthread – Kiran

    +0

    @ किरण "को एक अलग पुस्तकालय के रूप में क्यों प्रदान किया जाता है" की आवश्यकता होती है - क्योंकि कई कार्यक्रमों को धागे की आवश्यकता नहीं होती है, और 'libpthread' में लिंक करने से इस तरह अनावश्यक ओवरहेड लगाया जाता है कार्यक्रम। –

    संबंधित मुद्दे