विंडोज़ में, क्लाइंट प्रोग्राम को डीएलएल में फ़ंक्शंस तक पहुंचने के लिए एक स्थिर लाइब्रेरी से लिंक करने की आवश्यकता नहीं है। गतिशील लिंक पूरी तरह से रन टाइम पर हो सकता है क्लाइंट प्रोग्राम के बिना डीएलएल के अस्तित्व के बारे में जागरूक होने के बावजूद भी।
उदाहरण के लिए, यदि आप एक समारोह का नाम "foo" "bar.dll" नामक एक DLL में कॉल करने के लिए चाहता था, आप कोड इस प्रकार लिख सकते:
HINSTANCE hinst = LoadLibrary("bar.dll");
FARPROC foo = GetProcAddress(hinst, "foo");
foo();
और "foo" और "बार। डीएलएल "आसानी से मूल्य हो सकता है जो केवल रन टाइम पर स्थापित किए गए थे, कॉन्फ़िगरेशन फ़ाइल या किसी अन्य उपयोगकर्ता इनपुट के माध्यम से कहते हैं।
स्थैतिक पुस्तकालय का उद्देश्य इस गतिशील लोडिंग प्रक्रिया को स्वचालित करना है, जो क्लाइंट प्रोग्राम के संबंध में नियमित कार्यों के रूप में दिखाई देने वाले स्टब्स बनाकर, लेकिन रनटाइम पर डीएलएल से जुड़े हुए हैं। आम तौर पर यह लिंक क्लाइंट प्रक्रिया लोड होने के समय होता है, लेकिन पुस्तकालयों को भी उत्पन्न किया जा सकता है जो मांग को लोड और लिंक करेंगे, इसलिए डीएलएल को वास्तव में आवश्यक होने तक स्मृति में लाया नहीं जाएगा। यह स्थैतिक पुस्तकालय है जो निर्धारित करता है कि लिंक कब होता है।
अधिकांश भाग के लिए, एक कंपाइलर स्वचालित रूप से इन पुस्तकालयों को उत्पन्न कर सकता है, इसलिए तकनीकी रूप से उन्हें केवल डीएलएल कार्यों से लिंक करने की आवश्यकता नहीं होती है। हालांकि, साझा चरों को जोड़ने पर यह एक अपवाद (जिसे मैं जानता हूं) है।
विंडोज डीएलएल में आप चर के साथ एक साझा डेटा सेगमेंट बना सकते हैं जिसे डीएलएल लोड करने वाली किसी भी प्रक्रिया द्वारा एक्सेस किया जा सकता है। उन चर के आकार और प्रकारों के बारे में जानकारी संबंधित स्थिर पुस्तकालय में संग्रहीत है, और अकेले डीएलएल से निर्धारित नहीं किया जा सकता है। उन चरों तक पहुंचने के लिए, क्लाइंट प्रोग्राम को उस DLL के लिए स्थिर लाइब्रेरी के विरुद्ध लिंक करना होगा।
जहां तक मुझे पता है, लिनक्स साझा पुस्तकालय ऐसी अवधारणा का समर्थन नहीं करते हैं।
अद्यतन
मैं भी है कि विंडोज पर यह नहीं बल्कि नाम से जहां समारोह प्रवेश बिंदुओं केवल क्रमसूचक (संख्या) द्वारा निर्यात किया जाता है एक DLL बनाने के लिए संभव है उल्लेख करना चाहिए। इसे डेटा छिपाने के रूप में माना जा सकता है और आमतौर पर तब उपयोग किया जाएगा जब एक कार्यान्वयनकर्ता कुछ कार्यों को निजी बने रहना चाहता है।
स्थैतिक पुस्तकालय तक पहुंचने वाला कोई भी व्यक्ति उन कार्यों को नाम से कॉल करने में सक्षम होगा, क्योंकि लाइब्रेरी में फ़ंक्शन नाम को उचित ordinal से जोड़ने का विवरण होगा। कोई भी जिसके पास केवल डीएलएल था, उसे मैन्युअल द्वारा कार्यों से मैन्युअल रूप से लिंक करना होगा या नामों के साथ अपनी स्थिर पुस्तकालय उत्पन्न करना होगा।
इसे * आयात लाइब्रेरी * कहा जाता है, और उपकरण डीएलएल से निकालने के लिए मौजूद हैं। –