2017-09-08 24 views
5

चलाया नहीं जा सकता है मैंने विंडोज पर मिनी ट्रू के साथ क्वांग बनाया है जिसमें लक्ष्य ट्रिपल x86_64-w64-windows-gnu है। निष्पादन योग्य clang.exe और clang ++। Exe कार्य अपेक्षित के रूप में काम करता है अगर मैं उन्हें रिलीज मोड में बना देता हूं (वे बिना त्रुटि के प्रोग्राम संकलित करते हैं), हालांकि डीबग मोड में निर्माण करते समय मैं उन्हें नहीं चला सकता और this error प्राप्त कर सकता हूं - "यह ऐप आपके ऊपर नहीं चल सकता पीसी "। Clang-check.exe जैसे ही निर्माण से अन्य निष्पादन योग्य इस त्रुटि को प्रदर्शित नहीं करते हैं और सही तरीके से चलाते हैं।विंडोज 10 पर मिनीजीडब्लू के साथ निर्मित क्लैंग का डीबग बिल्ड

ऐसा लगता है जैसे कि यह दोनों clang.exe और बजना के रूप में फ़ाइल आकार के साथ ++। Exe में समस्या हो सकती हैं> 2GB आकार में, जबकि अन्य निष्पादनयोग्य में छोटे होते हैं, लेकिन मैं यह धारणा थी कि 64 पर फ़ाइल आकार की सीमा -बीबी विंडोज 4 जीबी है।

क्या कोई और इसी तरह की समस्या में चला गया है? यदि फ़ाइल का आकार समस्या है, तो निष्पादन योग्य आकार को कम करने के लिए डीबग प्रतीकों को एक अलग फ़ाइल में रखने के लिए एलएलवीएम प्राप्त करना संभव है?

संपादित करें: मैंने एलएलवीएम बनाने के दौरान -gsplit-dwarf ध्वज का उपयोग करके डीबग प्रतीकों को एक अलग फ़ाइल में डंप करके निष्पादन योग्य आकार को कम करने का प्रयास किया है, लेकिन इसका कोई प्रभाव नहीं पड़ता है।

उत्तर

4

हां, फ़ाइल का आकार इस समस्या का एक बहुत अच्छा संकेत है। IMAGE_OPTIONAL_HEADER64.SizeOfImage field एक डीडब्ल्यूओआर है, जो 4 जीबी अधिकतम आकार का सुझाव देता है। लेकिन एक और सीमा है जो पहले में जाती है, ओएस लोडर पूरे .exe या .dll फ़ाइल को स्मृति-मैप की गई फ़ाइल के साथ मेमोरी में मैप करता है। एमएमएफ पर विचार 2 जीबी से बड़ा नहीं हो सकता है। यह एक कठिन तकनीकी सीमा है, यह x64 पर भी लागू होता है। this post में इस समस्या के बारे में अधिक जानकारी।

डीबग जानकारी इसमें कोई संदेह नहीं है कि छवि फ़ाइल इतनी बुरी तरह क्यों उड़ाती है। तुलना के लिए, वीएस2017 के साथ शामिल क्लैंग बिल्ड को फ्रंट एंड के लिए 27 एमबी और x64 बैक एंड के लिए 32 एमबी की आवश्यकता है। क्यों -gsplit-बौना समाधान नहीं कर सकते आपकी समस्या this project page से दिखाई दे रहा है:

विखंडन जीसीसी 4.7 में कार्यान्वित किया जाता है, और objcopy और सोने लिंकर के हाल के संस्करणों से समर्थन की आवश्यकता है।

मिनजीडब्ल्यू आपको सोना लिंकर प्रदान नहीं कर सकता है। उन्होंने इसे पोर्ट करने में कोई प्रयास नहीं किया क्योंकि यह केवल ईएलएफ छवियां उत्पन्न कर सकता है। शीत कठोर तथ्यों, जब तक आप मिनजीडब्ल्यू पर निर्भर करते हैं तो आप एक अच्छी पैडल के बिना एक खाड़ी बनाते हैं।

कुछ कठोर जरूरत है। मैं संकोच से सिगविन का उल्लेख करेंगे। क्लैंग का निर्माण करने के लिए क्लैंग का उपयोग करने जैसे अन्य कंपाइलर पर विचार करें :) या एमएसवीसी ++। सामुदायिक संस्करण एक मुफ्त डाउनलोड है। Clang port पर एक नज़र डालने के लिए भी सुनिश्चित करें, उन्होंने एबीआई को संगत बनाने के लिए बहुत सारे काम किए।

+0

धन्यवाद, यह जानना अच्छा है कि सीमा फ़ाइल आकार के कारण है और कुछ और नहीं। क्या आप जानते हैं कि एलएलडी लिंकर डीबग प्रतीकों को एक अलग फ़ाइल में विभाजित करने का समर्थन करता है या नहीं? मैं दुर्भाग्यवश मिंगजीडब्लू का उपयोग करके क्लैंग का निर्माण करने के लिए फंस गया हूं क्योंकि मुझे ओपन-सोर्स हेडर का उपयोग करने की ज़रूरत है, लेकिन मुझे डीएलडी का उपयोग करने के लिए डीएलजी का उपयोग करने में सक्षम होना चाहिए ताकि डीडीयूबीक्यूआईसीईआरई फ्लैग का उपयोग करके डीबग प्रतीकों के साथ क्लैंग का निर्माण किया जा सके। – ed95