2008-10-03 2 views
16

का उपयोग करना मान लें कि मैंने /etc/ld.so.conf में शामिल एक पथ में एक लाइब्रेरी foo.so.1.1.1 जोड़ा है, जब मैं सिस्टम पर ldconfig चलाता हूं तो मुझे लिंक foo.so.1.1 और foo मिलता है। तो .1 foo.so.1.1.1लिनक्स - ldconfig

foo.so.1.1.1 से foo.so लिंक भी प्राप्त करने के लिए मैं व्यवहार को कैसे बदल सकता हूं?

+0

http://stackoverflow.com/questions/462100/bash-script-to-create-symbolic-links-to-shared-libraries/8144642#8144642 – user1016736

उत्तर

24

ldconfig सोनोम की तलाश करने के लिए पाई गई सभी साझा वस्तुओं के अंदर दिखता है। इसके बाद उस soname का उपयोग लिंक के नाम के रूप में एक लिंक बनाता है। यह पारंपरिक है (लेकिन सार्वभौमिक रूप से किया गया है) सोनिया के लिए लाइब्रेरी का नाम और प्रमुख संस्करण होना है, इसलिए आपकी लाइब्रेरी foo.so.1.1 में foo.so.1 का soname होगा और ldconfig उसे एक लिंक बना देगा।

रन-टाइम सिस्टम का कोई भी हिस्सा foo.so नाम के बारे में कुछ भी नहीं जानता या जानता है। इसका उपयोग तब किया जाता है जब आप अपने प्रोग्राम को लाइब्रेरी से जोड़ते हैं। उस लिंक को रखने में कोई बात नहीं है जब तक कि आपके पास लाइब्रेरी के लिए अन्य सभी विकास फ़ाइलें (हेडर इत्यादि) न हों, इसलिए ldconfig स्वचालित रूप से इसे बनाने में कोई बात नहीं है। और चूंकि उपयोग करने के लिए लिंक का नाम केवल एक और सम्मेलन है, और इस मामले में फ़ाइल के अंदर बिल्कुल संग्रहीत नहीं किया गया है, तो ldconfig के बारे में जानने का कोई तरीका नहीं है कि कौन सा नाम बनाना है।

आम तौर पर मेकफ़ाइल के इंस्टॉल लक्ष्य में यह मैन्युअल रूप से बनाया जाएगा; जब लिनक्स वितरण के लिए लाइब्रेरी पैक की जाती है तो लिंक आमतौर पर हेडर फ़ाइलों के साथ -dev पैकेज में रहता है।

3

बस अपने आप सिमलिंक बनाना:

ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so 

ध्यान दें कि आवेदन पत्र इस तरह से पुस्तकालयों का उपयोग करने के लिए, वे स्पष्ट रूप से unversioned साझा वस्तु के खिलाफ जुड़े होने की जरूरत है। आईई: यह गतिशील लोडर के संस्करण मिलान प्रणाली को पूरी तरह से बाईपास करने के लिए एक तंत्र है।