2015-03-26 21 views
5

मेरा ऐप कई साझा पुस्तकालयों में खींचता है। कुछ सी ++ में लिखे गए हैं जो libstdC++ में खींचते हैं। जो libgcc_s.so में खींचता है। फिर भी दूसरों को सादे सी में लिखा गया है और -स्टैटिक-libgcc से जुड़ा हुआ है।क्या libgcc_s.so एक ही प्रक्रिया में स्थिर और गतिशील दोनों से जुड़ा हुआ है ठीक है?

तो अब मैं libgcc के टुकड़े स्थिर कई साझा पुस्तकालयों के अंदर जुड़ा हुआ है और libstdc गतिशील रनटाइम पर libgcc के अन्य बिट्स लोड हो रहा है ++ है।

Q1: इस स्थापना मुझे किसी भी परेशानी में हैं? क्या libgcc में आंतरिक स्थिति है जो इस मिश्रित लिंक को समस्याग्रस्त कर देगी, या क्या यह केवल इनलाइन कार्यों में है?

प्रश्न 2: मेरे ऐप को पुराने लिनक्स पर काम करने के लिए, मुझे libstdC++ भेजना चाहिए। और libgcc_s.so और इसे लोड करने के लिए मुख्य exe पर rpath का उपयोग करें। क्या यह करने का सही तरीका है?

+0

मैंने देखा है कि मेरा ऐप जो -स्टैटिक-libgcc के साथ बनाया गया है _on exit_ अगर मैं रनटाइम पर सी ++ लाइब्रेरी लोड करता हूं (जो libgcc_s लोड करता है), लेकिन केवल मिंगव-डब्ल्यू 64 32 बिट पर (मिंगव -64 बिट पर और लिनक्स पर 32 और 64 यह क्रैश के बिना मौजूद है)। – cap

उत्तर

1

इस सेटअप मुझे किसी भी परेशानी में हैं?

Absoulutely नहीं

। एक स्थैतिक रूप से जुड़ी लाइब्रेरी प्रोग्राम में आंतरिक रूप से शामिल की जाती है जैसे कि कार्यक्रम की अपनी संरचना में लागू किया गया हो।
Wikipedia से: (मेरे जोर)

एक स्थिर पुस्तकालय या स्थिर से जुड़े पुस्तकालय दिनचर्या, बाहरी कार्यों और चर का एक सेट जो संकलन समय पर एक फोन करने वाले में हल कर रहे हैं और कॉपी की गई है एक संकलक, लिंकर, या बांधने की मशीन द्वारा लक्ष्य आवेदन, एक वस्तु फ़ाइल उत्पादन और एक स्टैंड-अलोन निष्पादन में।

this supportive idea देखें।
आपकी टिप्पणी में दुर्घटना के लिए, यह एक बग की संभावना है।

क्या libgcc में आंतरिक स्थिति है जो इस मिश्रित लिंक को समस्याग्रस्त कर देगी, या क्या यह केवल इनलाइन कार्य है?

नहीं। बस इनलाइन कार्य करता है।

मेरे ऐप को पुराने लिनक्स पर काम करने के लिए, मुझे libstdC++ भेजना चाहिए। और libgcc_s.so और इसे लोड करने के लिए मुख्य exe पर rpath का उपयोग करें। क्या यह करने का सही तरीका है?

यह प्रश्न थोड़ा सा सलाह है, इसलिए मैं यह कहने जा रहा हूं कि मैं इसे कैसे करूंगा। मैं libstdC++ की खोज करूंगा। इसलिए रनटाइम में मानक/डिफ़ॉल्ट गतिशील-लिंकिंग खोज पथ (संभवतः एक पर्यावरण चर या सिस्टम के आधार पर एक निश्चित फ़ाइल में) में और यदि पाया जाता है, तो उसे लोड करें। यदि नहीं मिला, तो इसके बजाय भेजे गए पुस्तकालयों को लोड करें। यदि आप पहले से जानते हैं कि सिस्टम में उन गतिशील पुस्तकालय नहीं हैं तो मैं इसके बजाय प्रोग्राम के स्थिर निर्माण का उपयोग करने की सलाह देता हूं।

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