2015-10-14 3 views
8

साइगविन में डीएल/फोर्किंग त्रुटियों में बंपिंग करते समय, मैं rebaseall स्क्रिप्ट को कॉल कर रहा हूं और सब कुछ जादूगर रूप से फिर से काम करता है। मुझे पता है कि यह किसी भी तरह से cygwin स्थापना में dlls को संशोधित करता है क्योंकि मैंने समस्याग्रस्त लोगों और पुनर्जन्म वाले लोगों के बीच एक अंतर चलाया है।सिगविन में रीबेससेल क्या करता है?

इन बाइनरी फ़ाइलों में वास्तव में क्या संशोधित करता है और उन्हें फिर से काम करता है?

उत्तर

11

Error messages about module base addresses के अनुसार: विंडोज पर

DLLs परस्पर विरोधी आधार पते पर मेमोरी में लोड करने की आवश्यकता है। rebaseall एक साइगविन उपयोगिता है जो वर्तमान में स्थापित सभी पुस्तकालयों को स्कैन करता है और प्रत्येक को एक अलग आधार पते का अनुरोध करने के लिए सेट करता है ताकि कोई भी संघर्ष न करे।

एक थोड़ा और अधिक Handling repeated failures of rebaseall to allow cygwin remaps से तकनीकी व्याख्या:

क्योंकि यूनिक्स कांटा अर्थ विज्ञान (शायद), cygwin पुस्तकालयों दोनों माता पिता और एक कांटा के बच्चे में एक ही स्थान में मैप किया जाना चाहिए की

। सभी सिग्विन पुस्तकालयों में संकेत मिलता है कि उन्हें एक प्रक्रिया पता स्थान में मैप किया जाना चाहिए; यदि उन संकेतों का पालन किया जाता है, तो प्रत्येक लाइब्रेरी को दोनों स्थान रिक्त स्थानों में एक ही स्थान पर मैप किया जाएगा। हालांकि, पता स्थान में कहीं भी डीएलएल मैपिंग पूरी तरह से खुश है; संकेत को नियंत्रित नहीं माना जाता है। रीमेपिंग त्रुटि तब होती है जब एक सिग्विन प्रक्रिया शुरू होती है और इसके पुस्तकालयों में से एक को इसके संकेत द्वारा निर्दिष्ट स्थान पर मैप नहीं किया जा सकता है।

/usr/bin/rebaseall सभी सिग्विन पुस्तकालयों के लिए डीएलएल संकेतों को बदलता है ताकि कोई अंतर-पुस्तकालय संघर्ष न हो; यह एक मूल पते पर शुरू करने और काम करने के लिए एक संगत लेकिन ओवरलैपिंग लाइब्रेरी लेआउट का चयन करके ऐसा करता है। यह प्रक्रिया सुनिश्चित करती है कि कोई इंट्रा-साइविन विवाद नहीं है, लेकिन बाहरी डीएलएल के साथ विवादों से निपट नहीं सकता है जो साइगविन प्रक्रिया पता रिक्त स्थान (उदा। एंटी-वायरस डीएलएल) में हैं।

+0

बिल्कुल जो मैं सीखना चाहता था! – Fr0stBit

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