मैं एसएफएमएल के साथ काम कर रहा था, मैंने थोड़ा परीक्षण कार्यक्रम संकलित किया और लिंक विकल्प -lsfml-audio
जोड़ा। फिर, मैंने ldd ./program
का उपयोग किया जो गतिशील पुस्तकालयों को जोड़ने के लिए था। हैरानी की बात है कि, उनमें से कोई भी मैन्युअल रूप से मेरे मेकफ़ाइल में नहीं चुना गया था, न ही pkg-config --libs
का उपयोग कर रहा था।साझा लाइब्रेरी की निर्भरता लिंकिंग
मैंने साझा पुस्तकालयों के बारे में पढ़ना शुरू किया, और मेरे संदेहों को हल करने के लिए एक छोटा सा उदाहरण बनाया। हालांकि, मैं इस सवाल है:
क्यों कुछ पुस्तकालयों आप अपने makefile में निर्भरता जोड़ने की जरूरत है (या तो स्वयं या
pkg-config
की तरह एक स्क्रिप्ट का उपयोग) और अन्य पुस्तकालयों स्वचालित रूप से उनकी निर्भरता लिंक?
आप अपना डायनामिक पुस्तकालय बनाते समय, सिर्फ g++ -shared ...
आदेश में उचित -ldependency
विकल्पों को जोड़ने उपयोगकर्ता मैन्युअल रूप से बाद में निर्भरता को जोड़ने की परेशानी से बचने के लिए के रूप में के रूप में आसान है। उपलब्ध पुस्तकालयों में से कई ऐसा क्यों नहीं करते हैं?
मुझे लगता है कि यह ठीक ट्यूनिंग की क्षमता से संबंधित होना चाहिए जो पुस्तकालयों से जुड़ा हुआ है और ऐसा।
मुझे लगता है कि मुझे यहां कुछ नाम-कॉल करने की आवश्यकता है: साझा पुस्तकालय आमतौर पर उनकी निर्भरताओं में नहीं खींचते हैं (यह 'libtool' है जब यह '* .la' फ़ाइल देखता है)। उन्हें इसे शामिल करने की आवश्यकता नहीं है क्योंकि गतिशील लोडर उन्हें साझा पुस्तकालयों में '.NEEDED' शीर्षलेख से बाहर निकाल देगा। ओवरलिंकिंग मुद्दों के अलावा 'libtool' परिचय देता है, लिंक समय पर प्रतीकों की परिभाषाओं को देखने के लिए भी बहुत कुछ धीमा कर सकते हैं। –
@ होंक, हां, libtool इन समस्याओं का एक स्रोत है। हालांकि, पीकेजी-कॉन्फ़िगर स्क्रिप्ट भी ऐसा कर सकती हैं। किसी भी मामले में, वे निश्चित रूप से ईएलएफ प्लेटफ़ॉर्म पर आवश्यक नहीं हैं - आपको केवल उस चीज़ को लिंक करना होगा जो आप सीधे उपयोग करते हैं (हालांकि इसमें इनलाइन फ़ंक्शंस या मैक्रोज़ के माध्यम से उपयोग की जाने वाली कुछ भी शामिल है) – bdonlan