How do I *prevent* "weak" linking of static library symbols in Visual-C++? -


जहाँ तक मेरा व्यावहारिक परीक्षण हो, जब एक स्थिर पुस्तकालय ( .lib ) को अपने निष्पादन योग्य दृश्य-सी ++ में , यदि कोई निष्पादन योग्य .obj फ़ाइल स्थिर पुस्तकालय में एक को डुप्लिकेट प्रतीक निर्धारित करती है, तो स्थिर लाइब्रेरी में प्रतीक चुपचाप को नजरअंदाज कर दिया जाएगा

मैं यह नहीं कह सकता कि मैंने इसे जबकि, लेकिन मुझे आश्चर्य होगा कि यदि वे इस व्यवहार को बदलते हैं (विशेष रूप से .obj परिभाषित प्रतीकों .lib फ़ाइलों में प्रतीकों को ओवरराइड करते हैं)।

वीएस 2010 आरसी के साथ एक संक्षिप्त परीक्षण यह इंगित करता है कि मैंने जो भी वर्णन किया है वह अभी भी है

(मुझे)


अब सबसे पहले, मुझे गलत साबित करना अच्छा लगेगा, लेकिन कम से कम एक नियमित सी ++ फ़ंक्शन के लिए ऐसा लगता है जिस तरह से हो रहा है।

दूसरा, क्या यह रोकने का कोई तरीका है? मेरे पास एक फ़ंक्शन है, जब किसी भी द्विआधारी लिंक को इस फ़ंक्शन के साथ स्थिर लाइब्रेरी से जोड़ा जाता है, तो मैं यह पुष्टि करना चाहूंगा कि स्थिर लाइब्रेरी का संस्करण है वास्तव में प्रयोग किया जाता है, और कुछ बचे हुए या अन्य में परियोजना। (ध्यान दें: प्रश्न में एफ एन है test_suite * init_unit_test_suite * (int argc, char * argv []) , (*) इसलिए मैं इसे व्यावहारिक रूप से नहीं बदल सकता क्योंकि यह किसी तीसरे पक्ष की लिब से है।)


(*): यह बूस्ट है। मुख्य मुख्य कार्य है जो हमारे कस्टम स्थैतिक लिब द्वारा प्रदान किया जाना चाहिए। अगर कोई देव एक यूनिट टेस्ट प्रोजेक्ट तैयार करता है - जो कि संपत्ति शीट के जरिए स्थिर विज़ार्ड से जुड़ा होता है - लेकिन गलती से फ़ंक्शन को भी परिभाषित करता है, तो बिल्ड की आपूर्ति की गई फ़ंक्शन का उपयोग करने के बजाय निर्माण को तोड़ना चाहिए।

मुझे लगता है कि लिंकर अलग ढंग से व्यवहार करता है यदि आप स्वतंत्र obj फ़ाइल के खिलाफ लिंक करते हैं, तो एक स्थैतिक लिब में पैक नहीं किया जाता है कम से कम आपको प्रतीक डुप्लिकेट के बारे में कुछ चेतावनी / त्रुटि मिलनी चाहिए। कुछ समय पहले भी मुझे एमएस टूलचैन में नहीं मिल पाया था, लेकिन दो एमएस डिवाइस हैं जो करीब आते हैं और आसान हो सकते हैं। : और undocumented संभवत: ओबज फाइल से जुड़कर और प्रतीक को चुनने के रूप में घोषित करने से चाल चलती है? यदि नहीं, तो शायद exe-obj फ़ाइल में #pragma टिप्पणी (लिंकर, "/ alternatename: _YourSymbol = _DefaultExeSymbol") जोड़ना होगा।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -