को जोड़ने के बारे में पता होना चाहिए
विस्तार से कैसे काम करता है इस बारे में जानकारी दुर्लभ है। इसके अलावा आईडीई संकलन के विवरण को छुपाते हैं जो वास्तविक प्रोजेक्ट है जब आपके पास अपनी परियोजना के साथ कुछ लिंकिंग संबंधित समस्या है।प्रत्येक सी ++ डेवलपर को
आमतौर पर सी ++ पुस्तकों ने मुझे बताया कि
C++ code --> preprocessed c++ code --> object code
लेकिन वे वास्तव में क्या एक औसत डेवलपर इस तथ्य के बावजूद जोड़ने, लिंकिंग त्रुटियों आम हैं के बारे में पता होना चाहिए पर बहुत अधिक विस्तार में जाने नहीं है। एक ताजा सी ++ प्रोग्रामर को कैसे पता होना चाहिए कि निम्न की तरह किसी त्रुटि से कैसे निपटें?
XmlRpcSocket.o:XmlRpcSocket.cpp:(.text+0x48b): undefined reference to `[email protected]'
लेकिन यह प्रश्न विशेष रूप से इस समस्या के बारे में नहीं है (-lwsock32 इसे हल करता है)। समस्या जोड़ने के बारे में सामान्य ज्ञान की कमी है। मेरे विश्वविद्यालय सी ++ व्याख्याता ने एक स्लाइड के समय के लिए कुछ काले-बक्से के साथ जोड़ने के बारे में बात की।
इसके अलावा, लिंकिंग कार्यों के बारे में संसाधन दुर्लभ हैं और जिन लोगों को मैं जानता हूं उनमें से अधिकांश अभी भी ब्लैक-बॉक्स ऑपरेशन के रूप में जुड़ते हैं। जो मैंने लिंकिंग के बारे में सीखा है, वह प्रयोग के माध्यम से है, और थोड़े ने इसे "रास्ते में उठाया" है, लेकिन इस दृष्टिकोण के साथ समस्या यह है कि यह उत्तर देने से अधिक प्रश्न उठाती है।
उदाहरण के लिए: मुझे पता है .LIB फ़ाइलें लाइब्रेरी फ़ाइलें हैं जो ऑब्जेक्ट फ़ाइलों के बंडल हैं। अब, किसी को एक .LIB फ़ाइल का निर्माण और उपयोग कैसे करना चाहिए? इसका उपयोग करने के लिए वांछनीय कब है। LIB फ़ाइल? जब मैं स्थिर बना सकता हूं। एलआईबी फाइलें या डीएलएल का संदर्भ देने वाले लोग? जब मैं अपनी ऑब्जेक्ट फ़ाइलों के साथ एक .LIB फ़ाइल को लिंक करता हूं, तो क्या सबकुछ कॉपी हो जाता है, या केवल ऑब्जेक्ट फ़ाइलों का उपयोग करता है? मैं स्थिर रूप से जोड़ने के बजाय DLLs/तो फ़ाइलों को कब बनाना चाहिए? क्या मुझे सामान्य समस्याओं को हल करने के लिए ऑब्जेक्ट फ़ाइलों की आंतरिक संरचना के बारे में जानना है? मुझे नाम-उलझन के बारे में क्या पता होना चाहिए? यह कब प्रासंगिक है? क्या मैं अपने प्रोजेक्ट के साथ कई अलग-अलग मानक पुस्तकालयों को लिंक कर सकता हूं यदि डीएलएस में से एक पुराना msvcrt लोड करता है? आदि
सवाल
जाहिर है मैं एक ही बार में ऊपर दिए गए सभी सवालों का जवाब की उम्मीद नहीं है। मुझे बस यह जानने की जरूरत है कि कहां से शुरू करना है। क्या कोई संसाधन है जैसे "हर प्रोग्रामर को मेमोरी के बारे में क्या पता होना चाहिए", जो लिंक करने के बारे में बात करता है? इसलिए, मुझे संसाधनों की आवश्यकता है और आपकी अंतर्दृष्टि पर लिंकिंग प्रक्रिया के बारे में जानने के लिए मुझे किस दिशा में जाना चाहिए।
प्रत्येक डेवलपर को जोड़ने के बारे में क्या पता होना चाहिए?
सी ++ भाषा वर्तमान में मॉड्यूल और पुस्तकालयों का समर्थन नहीं करती है, इसलिए इस तरह के समर्थन अक्सर कार्यान्वयन विशिष्ट भाषा एक्सटेंशन के साथ किया जाता है।विशिष्ट ऑपरेटिंग सिस्टम और कंपाइलर के लिए बेहतर प्रश्न पूछें। –
जिस तरह से यह किया गया है वह पॉज़िक्स और विंडोज दोनों में बहुत समान है। आपके पास .lib/.a फ़ाइलें हैं। आपके पास .dll और .so फ़ाइलें हैं। आपके पास दोनों प्रणालियों पर _undefined संदर्भ_ त्रुटियां हैं। ऑब्जेक्ट फ़ाइल प्रारूप अलग हैं, लेकिन बहुत सी सामान्य जमीन है। यह सवाल लिंकिंग के बारे में आधिकारिक सी ++ दस्तावेज़ों के बारे में नहीं है, मुझे पता है कि मानक कहता है कि लिंकिंग _implementaion detail_ है। सी ++ दुनिया में जोड़ने के सामान्य प्रथाओं के बारे में। – Klaufir
विंडोज़ में आपको '__declspec (dllexport)' जैसी चीजों को सी ++ कोड में लिखना पड़ सकता है, यूनिक्स में यह सही लिंकिंग का समर्थन करने के लिए '__attribute__ ((__visibility __ (" default ")) जैसे कुछ हो सकता है। –