मैं एक स्टेटिक (टिप्पणियों को पढ़ने के बाद जोड़ा गया स्थिर) संकलित कर रहा हूं C++ लाइब्रेरी PoDoFo और इसकी कुछ निर्भरताएं वैकल्पिक हैं, जैसे कि libJPEG, libTiff और libPNG। हालांकि, बहुत से पुस्तकालयों के पास एक दूसरे पर निर्भर रहने का विकल्प भी है। उदाहरण के लिए आप libTiff को libJPEG के साथ संकलित करके JPEG समर्थन को libTiff में सक्षम कर सकते हैं।

एक आदर्श दुनिया में मुझे उम्मीद है कि libTIFF libJPEG कार्यों को यह महसूस करके सक्षम करेगा कि इसकी libJPEG तक पहुंच है क्योंकि मैंने इसे PoDoFo के अपने संकलन में शामिल किया था। अफसोस की बात है कि मुझे लगता है कि जब मैं पहली बार libTIFF संकलित करता हूं तो कार्यों को सक्षम/अक्षम करने का निर्णय लिया जाता है।

तो इसका मतलब है कि मेरे PoDoFo पुस्तकालय में कई बार libJPEG होगा, शायद समान प्रतियां यदि मैं एक ही पुस्तकालय का उपयोग करता हूं।

क्या जीसीसी कंपाइलर इसे महसूस करेगा और पुस्तकालयों को libJPEG की केवल एक प्रति से हटा देगा/रीलिंक कर देगा?

2
Dmitri Korin 16 जुलाई 2020, 04:04

2 जवाब

सबसे बढ़िया उत्तर

मूल रूप से हाँ, इसमें केवल एक प्रति शामिल होगी।

आप जिस संकलन स्विच को बदल रहे हैं, उसमें वास्तव में एक लाइब्रेरी को दूसरे में शामिल नहीं किया जाता है, वे केवल कार्यक्षमता को सक्षम करते हैं जिसके लिए उन पुस्तकालयों की आवश्यकता होती है, उदा। यदि आप libJPEG समर्थन को सक्षम करते हैं, तो libTIFF में jpeg और tiff स्वरूपों के बीच कनवर्ट करने के लिए फ़ंक्शन शामिल हो सकते हैं, लेकिन यदि आप ऐसा नहीं चाहते हैं तो आपको उस कार्यक्षमता के बिना शेष लाइब्रेरी को संकलित करने की अनुमति मिलती है।

जब आप किसी अंतिम एप्लिकेशन को PoDoFo के साथ लिंक करते हैं, तो आपको उन सभी वैकल्पिक निर्भरताओं को भी लिंक करना होगा जिन्हें आपने सक्षम किया था। यह गतिशील पुस्तकालयों के लिए स्वचालित हो सकता है लेकिन सभी निर्भरताएँ रनटाइम पर आवश्यक होंगी।

लगभग सभी मामलों में अंतिम आवेदन से जुड़ी प्रत्येक पुस्तकालय की केवल एक प्रति है - एक अपवाद यह है कि यदि आप स्थिर और गतिशील पुस्तकालयों को मिलाते हैं, लेकिन यह कीड़े का एक नया कैन है।

2
Joseph Ireland 16 जुलाई 2020, 11:43

मान लें कि सभी पुस्तकालय गतिशील रूप से जुड़े हुए हैं, रनटाइम लिंकर केवल प्रत्येक आश्रित पुस्तकालय की एक प्रति लोड करेगा (इसलिए libJPEG की एक प्रति लोड की जाएगी)।

एक आदर्श दुनिया में मुझे उम्मीद है कि libTIFF libJPEG कार्यों को यह महसूस करके सक्षम करेगा कि इसकी libJPEG तक पहुंच है क्योंकि मैंने इसे PoDoFo के अपने संकलन में शामिल किया है, लेकिन दुख की बात है कि मुझे लगता है कि कार्यों को सक्षम/अक्षम करने का निर्णय तब लिया जाता है जब मैंने पहली बार libTIFF संकलित किया था।

आपके द्वारा वर्णित सुविधा को विलंबित लोडिंग कहा जाता है और यह विंडोज़ में समर्थित है लेकिन लिनक्स पर नहीं (कम से कम डिफ़ॉल्ट रूप से नहीं, देखें Implib.so टूल)।

0
yugr 16 जुलाई 2020, 08:38