मुझे यकीन है कि यह जानकारी कहीं मौजूद होनी चाहिए, लेकिन मैं इसे किसी भी मंच या दस्तावेज़ीकरण में नहीं ढूंढ पा रहा हूं। मैंने यह सब अपने स्वयं के प्रयोग से घटा लिया है, लेकिन मैं अधिक आधिकारिक स्रोत से प्रतिक्रिया की सराहना करता हूं।
पैकेज आयात - यह आईडीई में परियोजना विकल्पों में "रनटाइम पैकेज" सूची के रूप में दिखाई देता है। यदि आप आईडीई में "रनटाइम पैकेज" सूची से कुछ भी जोड़ या निकालते हैं, तो यह टैग इसे प्रतिबिंबित करने के लिए अपडेट किया जाएगा। यदि यह टैग cbproj फ़ाइल से खाली है या गायब है, तो यह स्वचालित रूप से आरएडी स्टूडियो में स्थापित सभी डिज़ाइन-टाइम पैकेजों से जुड़े सभी रन-टाइम पैकेजों की सूची के साथ पॉप्युलेट हो जाएगा। कमांड लाइन से निर्माण करते समय इस टैग का कोई प्रभाव नहीं पड़ता है। आईडीई पैकेजइम्स टैग का उपयोग केवल पुस्तकालयों की गणना करने के लिए करता है जो वास्तव में लिंक करने जा रहे हैं।
इस सूची में एक लाइब्रेरी रखना (स्वयं ही) कोई नई निर्भरता नहीं बनाता है; आप अनिवार्य रूप से आईडीई को बता रहे हैं "यदि आपको इनमें से किसी भी पुस्तकालय को लिंक करना है, तो उन्हें स्थिर रूप से बजाए गतिशील रूप से लिंक करें"।
ऑलपैकेज लाइब्स - यह उन सभी पुस्तकालयों की आईडीई की सूची है जो परियोजना को सफलतापूर्वक लिंक करने के लिए आवश्यक हैं। कमांड लाइन से निर्माण करते समय इस टैग का कोई प्रभाव नहीं पड़ता है। यदि आप प्रोजेक्ट में बदलाव करते हैं (उदा। फ़ाइल जोड़ें) आईडीई AllPackageLibs की सामग्री को पुन: सम्मिलित करने का प्रयास करेगा। यह प्रोजेक्ट की फाइलों में #pragma link
एस से इसकी गणना करता है। (मैं इस परियोजना में #pragma link
रों के सभी बाहर टिप्पणी और देख कि AllPackageLibs repopulated नहीं किया गया था जब मैं एक परियोजना संशोधन किए गए द्वारा इस निर्धारित।)
LinkPackageStatics - आईडीई AllPackageLibs कि करता है में एक पुस्तकालय मिलता है पैकेज Imports में दिखाई नहीं देता है, यह उस लाइब्रेरी को स्थिर रूप से लिंक करने का निर्णय लेता है। उस स्थिति में, आईडीई स्वचालित रूप से लाइब्रेरी नाम को LinkPackageStatics पर कॉपी कर देगा। यदि आईडीई से बिल्डिंग हो, तो यह टैग हमेशा ऑलपैकेज लाइब्स और पैकेज इंपोर्ट्स से पुनः कंप्यूट किया जाएगा, इसलिए जो भी आप मैन्युअल रूप से यहां जोड़ते हैं उसे लिंकर द्वारा अनदेखा कर दिया जाएगा। हालांकि, यदि कमांड लाइन से बिल्डिंग, इस टैग (.libs या .bpis) की सभी फाइलें लिंक होंगी और ilink32 की कमांड लाइन के 'objfiles' अनुभाग में दिखाई देंगी।
LinkPackageImports - आईडीई AllPackageLibs में एक पुस्तकालय PackageImports में प्रदर्शित करता है कि मिलते हैं तो वह फैसला करता है गतिशील है कि पुस्तकालय से जोड़ने के लिए। उस स्थिति में, आईडीई लाइब्रेरी नाम (एक .bpi एक्सटेंशन के साथ) को LinkPackageImports पर कॉपी करेगा। यदि आईडीई से बिल्डिंग हो, तो यह टैग हमेशा ऑलपैकेज लाइब्स और पैकेज इंपोर्ट्स से पुनः कंप्यूट किया जाएगा, इसलिए जो भी आप मैन्युअल रूप से यहां जोड़ते हैं उसे लिंकर द्वारा अनदेखा कर दिया जाएगा। हालांकि, यदि कमांड लाइन से बिल्डिंग, इस टैग (.libs या .bpis) की सभी फाइलें लिंक होंगी और ilink32 की कमांड लाइन के 'libfiles' अनुभाग में दिखाई देंगी।
PackageLibs - PackageLibs (.libs या .bpis) में कुछ भी सीधे आईडीई (क्या PackageImports शामिल की परवाह किए बिना) द्वारा LinkPackageStatics में जोड़ दिया जाएगा। ये libs AllPackageLibs से आने वाले libs के सामने LinkPackageStatics में जोड़े गए हैं। कमांड लाइन बिल्ड इस टैग से प्रभावित नहीं हैं।
जब भी आप आईडीई को लिंकपैकेजैटिक्स या लिंकपैकेज आयात को संशोधित करने की उम्मीद कर रहे हैं, तो आपको पहले आईडीई में प्रोजेक्ट बनाना होगा; फिर परियोजना विकल्पों में मामूली परिवर्तन करें (और इसे पूर्ववत करें); फिर परियोजना को बचाओ। इस बिंदु पर आईडीई लिंकबैकेजैटिक्स या लिंकपैकेज आयात को cbproj पर लिख देगा ताकि आपकी परियोजना कमांड लाइन पर लिंक की जा सके।
लिबियों को जोड़ने के अन्य तरीके - फाइलों को जोड़ने के लिए कुछ तरीके भी हैं जो इन चार टैग को शामिल नहीं करते हैं। आप सीधे परियोजना में .lib जोड़ सकते हैं (प्रोजेक्ट राइट-क्लिक करें | जोड़ें ...), या आप प्रोजेक्ट के साथ संकलित फ़ाइलों में से एक में #pragma comment (lib, "libraryname.lib")
पंक्ति डाल सकते हैं।
यदि आप सीधे परियोजना में .lib जोड़ते हैं, तो यह अन्य सभी पुस्तकालयों के साथ कमांड लाइन पर दिखाई देगा। यदि आप #pragma comment
चाल का उपयोग करते हैं, तो लाइब्रेरी कमांड लाइन पर दिखाई नहीं देगी, और आप यह नहीं देख पाएंगे कि यह लिंक किया गया था (tdump
का उपयोग करके और निर्यात को देखकर)।
सारांश
जब कमांड लाइन से जोड़ने, केवल cbproj टैग (इन पांच में से) कोई असर है कि LinkPackageStatics में जोड़ने के लिए (objfiles अनुभाग में जोड़ने के लिए libs) और LinkPackageImports (libs हैं libfiles खंड)। इन टैग की सामग्रियों को AllPackageLibs और PackageImports से आईडीई द्वारा गणना की जाती है, लेकिन यदि आप कमांड लाइन से लिंक करने की आवश्यकता है तो आप उन्हें .cbproj में मैन्युअल रूप से सेट कर सकते हैं।
आईडीई से लिंक करते समय, आप आमतौर पर आईडीई को आपके पुस्तकालयों का प्रबंधन करना चाहते हैं। यदि आपको एक लाइब्रेरी जोड़ने की आवश्यकता है जो आईडीई स्वचालित रूप से पता नहीं लगाता है, तो आपको बाहरी संपादक में .cbproj फ़ाइल खोलनी चाहिए और गायब लाइब्रेरी को AllPackageLibs टैग में जोड़ना चाहिए। यदि आप लाइब्रेरी को गतिशील रूप से लिंक करना चाहते हैं, तो आपको "रनटाइम पैकेज के साथ बनाएं" सूची (उर्फ पैकेज आयात) में लाइब्रेरी का नाम भी जोड़ना चाहिए।
यदि आप यह सुनिश्चित करना चाहते हैं कि आप अपने सभी पुस्तकालयों को गतिशील रूप से जोड़ रहे हैं, तो .cbproj फ़ाइल में LinkPackageStatics टैग देखें। यदि उस सूची में कोई पुस्तकालय हैं, तो वे स्थिर रूप से जुड़े हुए हैं। इसे ठीक करने के लिए, उन पुस्तकालयों के नामों को पैकेजलिब्स टैग में कॉपी करें (और उनके एक्सटेंशन को बीपीआई में बदलें); फिर LinkPackageStatics टैग को हटा दें।
यह कमाल है। धन्यवाद –