2011-02-01 16 views
7

मैं एक परियोजना में दोनों स्थिर और साझा पुस्तकालयों बनाना चाहता हूं।स्थिर और साझा सी ++ पुस्तकालय दोनों बनाना

मुझे पता है कि साझा पुस्तकालयों को स्थिति स्वतंत्र कोड प्राप्त करने के लिए -फिक के साथ संकलित वस्तुओं से बनाया जाना चाहिए, जबकि स्थिर पुस्तकालय को इसकी आवश्यकता नहीं है। यह सब ठीक है और मैं या तो साझा या स्थैतिक पुस्तकालय बना सकता हूं।

मैं अलग-अलग ऑब्जेक्ट फ़ाइलों को प्राप्त करने के लिए अपने स्रोत को दो बार संकलित नहीं करना चाहता, तो यह आमतौर पर कैसे किया जाता है? मैंने how to get a shared library based on a static one पढ़ा। हालांकि, उदाहरण स्थिर पुस्तकालय -fpic के साथ बनाया जा रहा है दिखाता है। क्या यह जाने का रास्ता है? क्या इस बात से अवगत रहना है?

क्या कोई सामान्य दृष्टिकोण दोनों स्थिर और साझा पुस्तकालयों को संकलित करने के लिए है? जैसे पहला स्थैतिक और lib पर आधारित एक साझा संस्करण बनाया गया है?

मुझे यह जानने में दिलचस्पी है कि इसके लिए अलग-अलग दृष्टिकोण हैं और चयन करते समय क्या विचार करना चाहिए।

मैं लिनक्स पर gcc4.4 का उपयोग कर रहा हूं।

अग्रिम धन्यवाद!

उत्तर

6

आम तरीका है कि मैंने देखा है है, वास्तव में, अपने स्रोत दो बार संकलन, एक बार पीआईसी के साथ और एक बार बिना। यदि आप ऐसा नहीं करते हैं, तो आप या तो स्थिर पुस्तकालय में पीआईसी ओवरहेड के साथ हवादार हो जाते हैं, या एक साझा ऑब्जेक्ट जिसे ओएस द्वारा स्थानांतरित नहीं किया जा सकता है (प्रभावी रूप से इसका अर्थ है कि यह लाइब्रेरी के कई ग्राहकों में साझा नहीं किया जाता है)।

+0

इस दृष्टिकोण के लिए, यदि कोई एक साथ स्थिर और साझा पुस्तकालयों को एक साथ बनाए रखना चाहता है तो ऑब्जेक्ट फ़ाइलों की व्यवस्था कैसे करेगा? कुछ ओबीजे/स्थिर/... और obj/साझा/... की तरह कुछ? – murrekatt

+0

@murrekatt: ज़रूर। प्रत्येक बिल्ड कॉन्फ़िगरेशन के लिए एक अलग निर्देशिका का उपयोग करना अच्छा होता है ताकि आप प्रत्येक को अपडेट करने के लिए पूरी तरह से पुन: संकलित किए बिना कई साथ-साथ उपयोग कर सकें। उन सबडिर्स को एक निर्देशिका के तहत रखने के लिए उन्हें जो कुछ भी दिखाया जाता है, कम से कम यदि आप अपनी मुख्य बिल्ड निर्देशिका के रूप में "obj" का उपयोग करते हैं और "स्थिर" और "दो" दोनों नामों के नाम "साझा" करते हैं। –

संबंधित मुद्दे