एक तरफ, @vcldeveloper द्वारा लिखे गए आलेख में कुछ सामान्य मुद्दों का एक अच्छा स्पष्टीकरण है। पास्कल कोड में गायब सी आरटीएल कार्यों को उपलब्ध कराने की चाल सी फाइलों या यहां तक कि .obj फ़ाइलों के रूप में आवश्यक कार्यों में लिंक करने की कोशिश करने से बहुत तेज और तेज है।
हालांकि, मुझे संदेह है कि मुझे पता है कि यहां क्या हो रहा है। मैं इस दृष्टिकोण का उपयोग करता हूं लेकिन वास्तव में इकाई में 100 से अधिक .obj फ़ाइलें हैं। मुझे लगता है कि जब मैं नए जोड़ता हूं, तो मुझे वही लिंकर त्रुटि मिलती है जैसा आप करते हैं। जिस तरह से मैं इसके आसपास काम करता हूं वह है कि मैं अपने $ LINK निर्देशों को फिर से ऑर्डर करने का प्रयास करूं। मैं नई ओबीजे फाइलों को एक-एक करके जोड़ने की कोशिश करता हूं और अंत में, मैं इस समस्या को हल करने में हमेशा सक्षम हूं।
यदि आपकी सी फाइलें पूरी तरह से स्टैंडअलोन हैं तो आप प्रत्येक को एक अलग इकाई में डाल सकते हैं और लिंकर इसे संभालेगा। हालांकि, मुझे संदेह है कि यह मामला है और वास्तव में मुझे संदेह है कि अगर वे वास्तव में स्टैंडअलोन थे तो यह समस्या नहीं होगी। साथ ही, यह एक इकाई में $ LINK निर्देशों के लिए वांछनीय है ताकि किसी भी आरटीएल कार्यों को आपूर्ति करने की आवश्यकता हो, केवल एक बार और एक बार आपूर्ति की जा सके (उन्हें $ LINK निर्देशों के समान इकाई में दिखाई देने की आवश्यकता है)।
लिंकर में यह विषमता डेल्फी 6 में मौजूद था और डेल्फी में मौजूद है 2010.
संपादित करें 1: अहसास अब मुझ पर लगा दिया है कि इस मुद्दे की वजह से डेल्फी एक भी पास संकलक का उपयोग करने के शायद है । मुझे संदेह है कि "गायब बाहरी संदर्भ" त्रुटि यह है क्योंकि संकलक .obj फ़ाइलों को उस क्रम में संसाधित करता है जिसमें वे इकाई में दिखाई देते हैं।
मान लीजिए कि a.obj b.obj से पहले प्रकट होता है और फिर भी a.obj b() b.obj में एक फ़ंक्शन कॉल करता है। कंपाइलर नहीं जानता कि बी() उस बिंदु पर रहता है जहां इसे फ़ंक्शन कॉल को ठीक करने की आवश्यकता होती है। जब मुझे समय लगता है, तो मैं कोशिश करता हूं और परीक्षण करता हूं कि क्या यह परिकल्पना कम से कम व्यावहारिक है!
अंत में, समस्या से बाहर एक और आसान तरीका ए सी, बी सी और सीटी को एक सी फाइल में जोड़ना होगा जो मुझे लगता है कि ओपी के लिए इस मुद्दे को बाईपास करना है।
संपादित 2: stackoverflow.com/questions/3228127/why-does-the-order-of-linked-object-file-with-l-directive-matter
संपादित 3:: मैं एक और स्टैक ओवरफ़्लो सवाल है कि इस जमीन को शामिल किया गया पाया मैं इस समस्या को हल करने के लिए एक और सही मायने में बढ़िया तरीका मिल गया है।हर बार जब संकलक शिकायत
[DCC Error] Unit1.pas(1): E2065 Unsatisfied forward or external declaration: '_a'
आप बस, इकाई के कार्यान्वयन अनुभाग में, एक घोषणा तो की तरह जोड़ें:
procedure _a; external;
यदि यह एक नियमित है कि आप तो आप डेल्फी से कॉल करना चाहते हैं है स्पष्ट रूप से पैरामीटर सूची, सम्मेलन बुलावा आदि को सही करने की आवश्यकता है। अन्यथा, यदि यह बाहरी कोड के लिए एक नियमित आंतरिक है, तो आप पैरामीटर सूची को अनदेखा कर सकते हैं, सम्मेलन बुला सकते हैं आदि
मेरे ज्ञान के सर्वोत्तम में यह एकमात्र तरीका है जो दो वस्तुओं को आयात करने का एकमात्र तरीका है जो एक-दूसरे को संदर्भित करते हैं एक गोलाकार तरीका। मेरा मानना है कि इस तरह से बाहरी प्रक्रिया की घोषणा एक आगे की घोषणा करने के समान है। अंतर यह है कि कार्यान्वयन पास्कल कोड की बजाय किसी ऑब्जेक्ट द्वारा प्रदान किया जाता है।
अब मैं अपनी शस्त्रागार में कुछ और टूल्स जोड़ने में सक्षम हूं - प्रश्न पूछने के लिए धन्यवाद!
मेरा अनुमान है: "b_function()" या "c_function()" तीन ऑब्जेक्ट फ़ाइलों में से किसी एक में नहीं मिला है। आप समस्या को कई ऑब्जेक्ट फ़ाइलों को जोड़ने से संबंधित मानते हैं और आपने साबित किया है कि आप एक फ़ाइल को लिंक कर सकते हैं। क्या आपने लिंक करने का प्रयास किया, उदाहरण के लिए, केवल "बी.ओबीजे" और केवल "b_function()" आयात किया? –
शायद रूडी वेल्थुइस द्वारा यह आलेख मदद कर सकता है: http://rvelthuis.de/articles/articles-cobjs.html – vcldeveloper