मैं एक एम्बेडेड सिस्टम (विशेष रूप से, पीएसओसी 5 का उपयोग कर पीएसओसी 5) के लिए कोड विकसित कर रहा हूं, और सी ++ में लिख रहा हूं।एंबेडेड प्लेटफ़ॉर्म पर Vtables को सही तरीके से कार्यान्वित क्यों नहीं किया जा रहा है?
मैं, सी ++ का उपयोग कर, पहले C++ में संकलन संकलक झंडा -x c++
का उपयोग कर बंद नई परिभाषित करने और ऑपरेटरों को हटाते हैं, यकीन है कि अपवाद बनाने संकलक झंडा -fno-exception
साथ फेंक दिया नहीं कर रहे हैं के साथ सबसे अधिक बाधाओं पर काबू पाने के लिए हैं, लेकिन मैं आए हैं जब वर्चुअल फ़ंक्शंस का उपयोग करने की बात आती है तो ईंट की दीवार पर।
यदि मैं वर्चुअल फ़ंक्शन को आज़माता हूं और घोषित करता हूं, तो संकलक मुझे त्रुटि undefined reference to "vtable for __cxxabiv1::__class_type_info"
देता है। इस के आसपास जाने का एकमात्र तरीका कंपाइलर ध्वज -fno-rtti
का उपयोग करना है, जो त्रुटि को रोकता है और इसे सफलतापूर्वक संकलित करता है। हालांकि, अगर मैं ऐसा करता हूं, तो ओवरलोडेड वर्चुअल फ़ंक्शन चलाने की कोशिश करते समय एम्बेडेड प्रोग्राम क्रैश हो जाता है, और मुझे लगता है कि ऐसा इसलिए है क्योंकि vtable मौजूद नहीं है।
मुझे नहीं लगता कि आपको एम्बेडेड प्लेटफ़ॉर्म पर vtables को लागू करने में सक्षम क्यों नहीं होना चाहिए, क्योंकि यह सदस्य ऑब्जेक्ट से पहले या बाद में स्मृति में एक अतिरिक्त स्थान है (सटीक कंपाइलर के आधार पर)।
कारण मैं आभासी कार्यों का उपयोग करने के लिए कोशिश कर रहा हूँ है, क्योंकि मैं सी ++ के साथ FreeRTOS का उपयोग करना चाहते रहा हूँ, और अन्य लोगों को आभासी कार्यों का उपयोग कर (चर्चा के लिए http://www.freertos.org/FreeRTOS_Support_Forum_Archive/July_2010/freertos_Is_it_possible_create_freertos_task_in_c_3778071.html, और https://github.com/yuriykulikov/Event-driven_Framework_for_Embedded_Systems देख एक अच्छी तरह से लिखा एम्बेडेड सी ++ FreeRTOS के लिए द्वारा इस को लागू किया है ढांचा)
आप अपनी निष्पादन योग्य/साझा लाइब्रेरी को कैसे जोड़ रहे हैं? – jxh
क्या आप वाकई इस तथ्य के कारण हैं कि आप एक एम्बेडेड प्लेटफ़ॉर्म के लिए संकलित करते हैं? क्या आपने मानक प्लेटफ़ॉर्म पर कोड के प्रासंगिक हिस्सों को संकलित करने का प्रयास किया है? – jogojapan
पीएसओसी आईडीई बिल्ड प्रक्रिया के हिस्से के रूप में लिंकर स्क्रिप्ट चलाता है। यह सुनिश्चित करने के लिए कि यह मानक C++ लाइब्रेरी से लिंक है, मैंने ध्वज '-lstdC++' ध्वज शामिल किया है। – gbmhunter