मुझे आश्चर्य है कि जीसीसी में अपरिभाषित प्रतीकों का निवारण करने के लिए एक प्रभावी तकनीक है या नहीं। कभी-कभी मेरी परियोजनाओं में से एक लिंक करने में विफल रहता है और मैं आमतौर पर क्यों ढूंढने में काफी समय बिताता हूं। आम तौर पर यह एक गहरा छुपा मेकफ़ाइल, गलत पर्यावरण चर या इस तरह कुछ में एक टाइपो है। यदि आपका निर्माण अचानक "अपरिभाषित प्रतीक" के साथ मर जाता है तो यह किस विधि का उपयोग करता है और यह स्पष्ट नहीं है कि क्यों?अपरिभाषित प्रतीकों के लिए सामान्य समस्या निवारण तकनीक - जीसीसी
उत्तर
कहो इसे मेरा प्रारंभ विन्यास है:
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
bar.o: In function `baz()':
bar.cpp:(.text+0xd): undefined reference to `Foo::bar()'
collect2: ld returned 1 exit status
मैं सभी ओ और उदारीकरण फ़ाइलों को ग्रेप साथ लापता प्रतीक को देख के साथ शुरू करते हैं।
$ grep 'Foo.*bar' *.o *.lib *.so
Binary file bar.o matches
Binary file foo.o matches
तब मैं वें nm
उपकरण का प्रयोग करें प्रत्येक वस्तु फ़ाइल का निरीक्षण करने के अगर प्रतीक वहाँ लापता या कार्यान्वित किया जाता है।
$ nm foo.o
00000000 T _ZN3Foo3barEv
$ nm bar.o
00000000 T _Z3bazv
U _ZN3Foo3barEv
U __gxx_personality_v0
अब मुझे पता है कि Foo :: bar() foo.o में लागू किया गया है और इस फ़ाइल को निष्पादन योग्य में लिंक कर सकता है। तो अगला भाग यह जांचना है कि क्यों foo.o लिंक कमांड में शामिल नहीं है।
कभी-कभी आपको कोई कार्यान्वयन प्रतीक नहीं मिलता है। यह आम तौर पर तब होता है जब कार्यान्वयन इकाई निर्माण नहीं होती है, या प्रतीक (#ifdef
, प्रतीक दृश्यता) शामिल नहीं है। ऐसे मामले में मैं .cpp फ़ाइल की खोज करता हूं जहां प्रतीक परिभाषित किया गया है, फ़ाइल उत्पन्न करने के लिए make $file.o
चलाएं, और बाद में फ़ाइल का निरीक्षण करें। जब smbol वहां होता है, तो मैं पुस्तकालय या निष्पादन योग्य बनाना जारी रखता हूं जहां यह फ़ाइल डाल दी जाती है।
आपकी जानकारी के लिए धन्यवाद। लिंकर द्वारा ज्ञात पुस्तकालयों को डंप करने के लिए -ब्लू-टी विकल्प जोड़ने के लिए भी उपयोगी है। क्या आप वास्तव में मुश्किल मामलों के लिए कुछ जानते हैं? उदाहरण के लिए दो आश्रित स्थैतिक पुस्तकालय गलत क्रम में शामिल हैं? – danatel
@ डानाटेल मुझे खेद है, लेकिन मेरे पास गलत लाइब्रेरी निर्भरताओं को डीबग करने के लिए कोई सामान्य तकनीक नहीं है, क्योंकि प्रत्येक मामले अलग है। – Rudi
यह एक अच्छा जवाब है। आश्चर्य है कि इसे क्यों स्वीकार नहीं किया गया है। –
- 1. अपरिभाषित प्रतीकों
- 2. अपरिभाषित प्रतीकों
- 3. अपरिभाषित प्रतीकों "के लिए vtable ..." और "टाइपइन्फो ..."?
- 4. "अपरिभाषित प्रतीकों" सरल टेम्पलेट वर्ग
- 5. उद्देश्य-सी - अपरिभाषित प्रतीकों
- 6. समस्या निवारण heisenbug
- 7. समस्या निवारण डबल पॉइंटर
- 8. अपरिभाषित प्रतीकों "_OBJC_CLASS _ $ _ Appirater"
- 9. समस्या निवारण कि
- 10. अपरिभाषित प्रतीकों: "_OBJC_CLASS_ $ त्रुटि
- 11. अपरिभाषित प्रतीकों: "_SCNetworkReachabilitySetCallback"
- 12. समस्या निवारण PHP मेल
- 13. समस्या निवारण system.io.fileloadexception
- 14. बस त्रुटि समस्या निवारण
- 15. समस्या निवारण त्रुटि एरेग() preg_match लिए()
- 16. SQL सर्वर टाइमआउट समस्या निवारण
- 17. यात्रा विक्रेता समस्या निवारण प्रतिनिधित्व
- 18. ओपनजीएल बनावट के लिए सामान्य समस्या निवारण चरण क्या नहीं दिख रहे हैं?
- 19. समस्या निवारण JAXB unmarshalling एनपीई
- 20. इनलाइन फ़ंक्शन "अपरिभाषित प्रतीकों" त्रुटि
- 21. इनलाइन समारोह डुप्लिकेट प्रतीकों जीसीसी
- 22. समस्या निवारण Grails/ग्रोवी स्मृति रिसाव?
- 23. समस्या निवारण के लिए सुझाव धीमे TFS सर्वर
- 24. समस्या निवारण के लिए मेकफ़ाइल लक्ष्य का पता कैसे लगाएं?
- 25. मैं अपने प्रोग्राम डिज़ाइन और समस्या निवारण तकनीक को कैसे सुधार सकता हूं?
- 26. सामान्य लिस्प में अनियंत्रित प्रतीकों
- 27. एंड्रॉइड - स्क्रीन लेआउट स्केल करने के लिए सामान्य तकनीक
- 28. Windows अनुसूचित कार्य समस्या निवारण कैसे करें?
- 29. सी प्रोग्राम में समस्या निवारण प्रिंटफ
- 30. एसक्यूएल सर्वर 2008 में डेडलॉक समस्या निवारण
मैं "प्रतीक" शब्द के लिए शब्दकोश में देखता हूं ... (क्षमा करें, यह देर हो चुकी है ...) – dappawit