2016-09-20 11 views
6

पर बौने स्टैक आकार से स्टैक सब्बल निर्देश बहुत अलग है हाल ही में हमने अपने ओएस एक्स बिल्ड पर यह चेतावनी प्राप्त करना शुरू कर दिया है।एलडी चेतावनी: ओएस एक्स

ld: warning: 
could not create compact unwind for __Z10createMenuv: stack subl instruction is too different from dwarf stack size 
ld: warning: 
could not create compact unwind for __Z10del_modulejb: stack subl instruction is too different from dwarf stack size 
could not create compact unwind for __Z14menu_patchbytev: stack subl instruction is too different from dwarf stack size 

मुझे क्रोमियम बग ट्रैकर में इसकी कुछ चर्चा मिल सकती है लेकिन सुझाए गए "फिक्स" को कॉम्पैक्ट अवांछित पीढ़ी को अक्षम करना है। मैं समझना चाहता हूं कि यह चेतावनी क्यों होती है और यदि यह हमारे कोड या टूलचेन में कोई समस्या है।

हमारे toolchain Xcode 7.3.1 से है:

Apple LLVM version 7.3.0 (clang-703.0.31) 
Target: x86_64-apple-darwin15.6.0 

उत्तर

0

कुछ शोध, सर्वश्रेष्ठ उत्तर मैं देख रहा हूँ विशेष रूप से toolchain के साथ एक मुद्दा है कि वहाँ और अपने कोड नहीं कर रही हैं।

यह 64 बिट के बजाय 32 बिट के रूप में बना रहा है। और यह हल करने के लिए आपके पास दो चीजों में से एक करने की ज़रूरत:

  1. 32 बिट एक के बजाय Xcode toolchain के एक 64 बिट संस्करण का उपयोग करें।
  2. x86_64 कोड

है यही कारण है कि कुछ तनाव की सलाह देते हैं, लेकिन मैं कॉम्पैक्ट खोलना के बारे में चेतावनी को दबाने के लिए किसी भी विकल्प दिखाई नहीं देता फेंकना करने के लिए संकलन के दौरान उचित विकल्प प्रदान करें। चेतावनी -warn_compact_unwind को सक्षम करने के लिए केवल एक विकल्प प्रतीत होता है।

आप क्या कर सकते हैं सभी लिंकर चेतावनियों को गुजरने के लिए है- wl, -w विकल्प संकलक के लिए।

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

अंत में, 64 बिट आर्किटेक्चर के लिए संकलन करने का प्रयास करें। ऐसा करने के लिए आप -arch कंपाइलर विकल्प के साथ आर्किटेक्चर निर्दिष्ट करें - आपके मामले में -arch x86_64। ।

मुझे लगता है कि अधिकांश उपयोगकर्ता Xcode 7 को इंगित करते हैं और कभी-कभी Xcode 6 समस्या बनता है।

इसके अलावा, इसे ठीक करने के लिए एक और तरीका है।

परियोजना सेटिंग्स बिल्ड में विकल्प निर्माण और सेट नहीं विकल्प में Bitcode सक्षम पाते हैं। मुझे उम्मीद है कि यह आपके लिए मदद करेगा।

+0

हम एक्सकोड आईडीई का उपयोग नहीं कर रहे हैं लेकिन 'मेक' और 'gcc' ड्राइवर का उपयोग कर कमांडलाइन से संकलित कर रहे हैं। –

+0

भी, हमारे पास x86 ('-arch i386') के लिए यह चेतावनी है, x64 (' -arch x86_64') नहीं है। –