2009-12-07 11 views
5

मेरे पास गतिशील पुस्तकालयों के खिलाफ एक जीसीसी-संकलित एप्लिकेशन है। क्या ऑर्डर लगाने का कोई तरीका है जिसमें पुस्तकालयों को लोड किया जाता है? (मेरे मामले में एक लाइब्रेरी कन्स्ट्रक्टर अन्य लाइब्रेरी कन्स्ट्रक्टर द्वारा स्थापित संसाधनों का उपयोग करता है)।लाइब्रेरी लोडिंग ऑर्डर

धन्यवाद।

उत्तर

5

gcc लाइब्रेरी लोड करने का प्रभारी नहीं है, या तो ld.so आपके प्रोग्राम लोड होने पर स्वचालित रूप से करता है, या आप इसे मैन्युअल रूप से करते हैं जैसे @jldupont सुझाता है।

और ld.so जानबूझकर randomise वापसी-से-स्टडलिब हमलों को रोकने के लिए आदेश हो सकता है।

तो या तो:

  1. लोड पुस्तकालयों अपने आप को।
  2. या लाइब्रेरी लोड स्क्रिप्ट के बीच निर्भरताओं को हटा दें।
  3. पुस्तकालयों में निर्भरताएं स्वयं (संभवतः काम कर सकती हैं) हो सकती हैं जब आप प्रत्येक साझा लाइब्रेरी को जोड़ने का बिंदु प्राप्त करते हैं, तो सुनिश्चित करें कि इसमें लिंक कमांड में -l<dependentlib> शामिल है। आप एक परीक्षण कार्यक्रम बनाकर इसका परीक्षण कर सकते हैं जो केवल उस साझा लाइब्रेरी से लिंक होता है - यदि यह बनाता है और चलता है, तो लाइब्रेरी में सभी आवश्यक निर्भर libs शामिल हैं। यह मदद कर सकता है अगर ld.so निर्भरता क्रम में पुस्तकालयों को लोड करता है - जो मुझे लगता है कि इसे करना है।
+0

मैं "पुस्तकालयों को निर्भरता स्वयं कैसे बना सकता हूं"? – jackhab

+0

@ जैक - मेरा जवाब संपादित किया - मूल रूप से लाइब्रेरी को लिंक करते समय सुनिश्चित करें कि सभी आश्रित libs जुड़े हुए हैं। –

3

आप dlopen का उपयोग कर सकते हैं और पुस्तकालयों को स्वयं लोड कर सकते हैं: इस तरह, आप लोडिंग/अनलोडिंग प्रक्रिया पर एक बेहतर अनाज नियंत्रण प्राप्त कर सकते हैं। here देखें।

बेशक, यह एक "जीसीसी" आधारित समाधान नहीं है और इसके लिए आपके आवेदन को फिर से काम करने की आवश्यकता है ... हो सकता है कि आप "समस्या" को समझा सकें जिसका आप सामना कर रहे हैं?

यदि आप अपनी आवश्यकताओं के अनुरूप नहीं हैं तो आप मेरे समाधान की उपेक्षा कर सकते हैं। चीयर्स!

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