e.exe
मेरी कस्टम स्थैतिक लाइब्रेरी, c.lib
के विरुद्ध जुड़ा हुआ है, जो w.dll
में परिभाषित Win32 API का उपयोग करता है। w.dll
सी: \ विंडोज \ System32 में स्थित है और इसकी आयात लाइब्रेरी w.lib
है, जो विंडोज एसडीके निर्देशिका में स्थित है। शैल w.lib
अतिरिक्त निर्भरताc.lib
या e.exe
प्रोजेक्ट में सूचीबद्ध किया गया हो? (e.exe
दोनों मामलों में सफलतापूर्वक बनाता है।) सबसे अच्छा अभ्यास क्या है और क्यों? मुझे लगता है कि e.exe
को w.lib
के बारे में पता नहीं होना चाहिए।निर्भरता वाले स्टेटिक लाइब्रेरी
c.lib
केवल डेवलपर्स के समूह के बीच साझा किया जाना है (ग्राहकों को नहीं भेजा जाना चाहिए)।
टेस्ट: मैं VS2008 का इस्तेमाल किया और उपयोगिता DUMPBIN दोनों ही मामलों परिणामों का परीक्षण और यहाँ हैं करने के लिए:
- केस 1:
w.lib
c.lib
परियोजना में अतिरिक्त निर्भरताके रूप में जोड़ा।
dumpbin /archivemembers c.lib
उत्पादन सूचियों पुरालेख सदस्यों के रूप में c.lib
परियोजना से w.dll
में दोनों ऑफसेट और .obj फ़ाइलें।
- केस 2:,
इस बार DUMPBIN उत्पादन c.lib
का केवल .obj फ़ाइलें हैं और c.lib
के आकार से छोटी है: w.lib
नहीं c.lib
में लेकिन e.exe
परियोजना में अतिरिक्त निर्भरता के रूप में जोड़ा केस 1
में (c.lib
में अतिरिक्त निर्भरता रूप में जोड़ा गया दोनों ही मामलों मेंपरियोजना)
नोट:। मैं w.lib
और w.dll
यहाँ काल्पनिक रूप में, सामान्य नाम विंडोज पुस्तकालयों के लिए इस्तेमाल किया, लेकिन वे जैसे हो सकता है Userenv.lib और Userenv.dll या Version.lib और Version.dll ...
व्यापक उत्तर के लिए धन्यवाद। मेरा प्रारंभिक अनुमान गलत था - मैंने सोचा था कि यह वांछित exe था कि lib की निर्भरताओं से अवगत न हो, लेकिन अब जब मैं इसे * आयात लाइब्रेरी + कोड * बिंदु से देखता हूं तो यह समझ में आता है कि यह पता है कि इसका कोड क्या है (जो वास्तव में स्थिर lib से कोड शामिल है) पर निर्भर करता है। –
मैं इस जवाब से उलझन में हूं। पुस्तकालयों के शीर्ष पर पुस्तकालयों का निर्माण करना आम बात नहीं है? किसी भी विस्तारित पुस्तकालय को "आयात पुस्तकालय + कोड" माना जाएगा। मुझे लगता है कि पुस्तकालय के ब्योरे को छिपाने के लिए बेहतर अभ्यास है। – jwalk