2010-07-26 8 views
7

मेरे पास लगभग 15 कक्षाओं और उनके सदस्य कार्यों और सामानों की एक सी ++ संकलित स्थिर पुस्तकालय है, और संकलित, यह लगभग 14 मेगाबाइट है। यह Google की घनी हैश टेबल लाइब्रेरी और एमपीआईआर से जुड़ा हुआ है, जो विंडोज के लिए जीएमपी की तरह है, लेकिन मैंने इसे एक सादे एक्सई में किया और यह कुछ किलोबाइट था। यह इतना बड़ा क्यों है? इसके आकार को कम करने के लिए मैं क्या कर सकता हूं? ऐसा लगता है कि ऐसे अन्य कार्यक्रम हैं जो मेरे मुकाबले बहुत जटिल हैं जो बहुत छोटे हैं।मेरी स्थिर पुस्तकालय इतनी बड़ी क्यों है?

विजुअल C++ के साथ संकलित, कमांड लाइन है:

/Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" 
/D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t 
/Zc:forScope /Fp"Release\ang.pch" /Fa"Release\" /Fo"Release\" 
/Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue 
+0

क्या आप कुछ और विशिष्ट जानकारी दे सकते हैं? कंपाइलर, संकलन झंडे, आदि – Dusty

+0

विजुअल सी ++ के साथ संकलित, कमांड लाइन है: /ज़ी/नोलो/डब्ल्यू 3/डब्ल्यूएक्स-/ओ 2/ओई/ओई-/जीएल/डी "विन 32"/डी "एनडीईबीयूजी"/डी "_CONSOLE "/ डी" _UNICODE "/ डी" यूनिकोड "/ जीएम-/ईएचएससी/जीएस/जीई/एफपी: सटीक/जेडसी: wchar_t/Zc: forScope /Fp"Release\ang.pch"/Fa "रिलीज \"/फू " रिलीज \ "/Fd"Release\vc100.pdb"/जीडी/विश्लेषण-/त्रुटि रिपोर्ट: कतार – Foglio

+0

कमांड लाइन *, झंडे नहीं। – Foglio

उत्तर

16

स्थिर पुस्तकालय एक काफी अलग प्रारूप द्विआधारी समाप्त हो गया है; आंशिक रूप से क्योंकि इसमें काफी कुछ जानकारी है। अनिवार्य रूप से, स्थिर पुस्तकालय आपकी अनुवाद इकाइयों से उत्पन्न सभी .obj फ़ाइलों के ज़िप की तरह कार्य करता है। यह लिंकर को अप्रयुक्त कार्यों को फेंकने की अनुमति देता है, और यदि आप एलटीसीजी का उपयोग कर रहे हैं, तो यह इनलाइनर को क्रॉस-मॉड्यूल निर्णय और अन्य ऐसे अनुकूलन करने की अनुमति देता है।

इसके अतिरिक्त, कुछ संकलन मोड सीधे .lib में डिबगिंग प्रतीकों को एम्बेड करेंगे, अलग-अलग .pdb फ़ाइलों की आवश्यकता को हटा देंगे।

आम तौर पर आपको स्थिर पुस्तकालय आकार के बारे में चिंता करने की आवश्यकता नहीं है; अंतिम निष्पादन योग्य बनाते समय लिंकर सभी अतिरिक्त जानकारी निकाल देगा।

+0

लिंकर अनावश्यक और मृत कोड इत्यादि भी फेंकता है – greyfade

+0

@ ग्रेफेड: वास्तव में संकलक ऐसा करता है;) –

+0

@ बिली ओनेल: * लिंक समय * पर? – greyfade