/Lib/libc.so.6 क्यों गायब है?


20
find | grep libc.so.6

पता चलता है कि यह अंदर है /lib/i386-linux-gnu/libc.so.6, लेकिन एक स्क्रिप्ट जो मैं चला रहा था, उम्मीद थी कि यह सीधे नीचे होगी /lib, इसलिए कम से कम सिम्लिंक क्यों नहीं है?

अगर मैं एक सिमलिंक डालूं तो क्या मुझे कुछ भी टूटने का खतरा होगा?

जवाबों:


22

libc.soउबंटू 11.04 में मल्टीकार काम के हिस्से के रूप में स्थानांतरित किया गया था । कारण यह है कि वहाँ एक सिमलिंक नहीं हो सकता है मल्टीकार का उद्देश्य एक ही समय में दोनों i386और amd64संस्करणों को स्थापित करना संभव है libcताकि आप 64-बिट सिस्टम पर 32-बिट बायनेरिज़ को और अधिक आसानी से चला सकें और इसके विपरीत (और अन्य समान स्थितियों)। यदि libc6पैकेज में नए स्थान के लिए एक सिमलिंक होता है, तो dpkgव्यायाम के पूरे बिंदु को हराते हुए, अलग-अलग आर्किटेक्चर के लिए उस पैकेज के संस्करण एक ही समय में दोनों स्थापित करने योग्य नहीं होंगे ।

कुछ भी जो libc.soउबंटू 11.04 से ठीक से काम करने के लिए पथ को हार्डकोड करने के लिए अद्यतन किया जाना चाहिए। यदि आप जिस स्क्रिप्ट के बारे में बात कर रहे हैं, वह उबंटू का हिस्सा है, कृपया इस पर एक बग रिपोर्ट करें और multiarchटैग जोड़ें ।


1
अच्छा जवाब, आज कुछ नया सीखा (फिर से) :)
लेकेनस्टाइन

1
मैं जिस प्रोसेसर का उपयोग कर रहा हूं वह 64 बिट निर्देशों का भी समर्थन नहीं करता है। क्या आप कहेंगे कि सिमिलर को मैन्युअल रूप से जोड़ने से कोई जोखिम है? मुझे यकीन नहीं है कि मुझे ऐसा करने की ज़रूरत है, लेकिन अगर। वैसे भी, यह सही उत्तर लगता है। धन्यवाद।
एरिक बी

@ एरिक बी: क्या? क्या आप मुझे बता रहे हैं कि आप 32 बिट्स प्रोसेसर पर 64 ऐप का उपयोग करने की कोशिश कर रहे हैं? वह निश्चित रूप से काम करने वाला नहीं है । 32 बिट्स ऐप 64 बिट्स प्रोसेसर पर ठीक काम करते हैं, लेकिन इसके विपरीत नहीं।
लेकेन्स्टाइन

@Lekensteyn निश्चित रूप से वह नहीं है जो मैं कह रहा हूं। मैं जो कह रहा हूं वह यह है कि 64 बिट लाइब्रेरी के लिए मेरा कोई उपयोग नहीं है। इसलिए मेरे विशेष सिस्टम पर /lib/libc.so.632 या 64 बिट लाइब्रेरी के बारे में कोई भ्रम नहीं है।
एरिक बी

3
यदि आप कभी भी 64-बिट पैकेज का उपयोग नहीं करने जा रहे हैं, तो मुझे संदेह है कि सिम्कलिन को जोड़ने में कोई महत्वपूर्ण जोखिम है, नहीं।
कॉलिन वॉटसन

10

गतिशील पुस्तकालयों को कर्नेल द्वारा लोड किया जाता है, पथ एक प्रोग्राम में हार्डकोड नहीं किया जाता है। एक कार्यक्रम बस कहता है "मुझे libc.so.6 की आवश्यकता है"। सिस्टम तब लायब्रेरी पथों में खोज करता है /etc/ld.so.conf, जिसमें डिफ़ॉल्ट रूप से परिभाषित /usr/libऔर /libसम्‍मिलित है। इस फ़ाइल में अतिरिक्त कॉन्फ़िगरेशन फ़ाइलें शामिल हैं /etc/ld.so.conf.d

मेरे 64 बिट सिस्टम पर, परिभाषित पथ के कारण libc.so.6पाया जा सकता /lib/x86_64-linux-gnu/libc.so.6है /etc/ld.so.conf.d/x86_64-linux-gnu.conf:

# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu

पता लगाने के लिए पुस्तकालय के लिए एक कार्यक्रम से भरी हुई है, का उपयोग lddके रूप में ldd /bin/bash:

    linux-vdso.so.1 =>  (0x00007ffff1dff000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)

सिमलिंक डालने से कुछ भी नहीं टूटेगा।

खोज की गई निर्देशिकाओं की सूची प्राप्त करने के लिए, दौड़ें:

ldconfig -v -N | grep '^/'

-vदिखाई जाने वाली फ़ाइल + निर्देशिकाओं की एक सूची का कारण बनता है, -Nकैश ( /etc/ld.so.cache) को फिर से बनाए जाने से रोकता है ।


सिमलिंक लगाने से कुछ भी नहीं टूटेगा, लेकिन यह वास्तव में कुछ भी अच्छा नहीं करेगा, है ना?
एरिक बी

@ एरिक बी: आप किस कार्यक्रम / स्क्रिप्ट का उल्लेख कर रहे हैं? मैं समझ सकता हूं कि एक स्क्रिप्ट भ्रमित हो जाती है क्योंकि रास्ता हार्डकोड है। लेकिन एक कार्यक्रम के लिए रास्ता नहीं जानना होता है।
लेकेनस्टाइन

क्या यह ऐसे ही कार्य करता है? मुझे लगता है कि कभी-कभी ऐसे मुद्दे होते हैं जहां प्रोग्राम में स्थापित लाइब्रेरी नहीं मिल पाती हैं /usr/local/lib, लेकिन अगर मैं एक सिम्कलिन बनाता हूं तो वे ठीक काम करते हैं /usr/lib। इस व्यवहार का क्या कारण है?
पागल 2be

@ Crazy2be: आप के उत्पादन के बाद कर सकते हैं ldconfig -v -N | grep '^/'?
लेकेन्स्टाइन

@Lekensteyn: ज़रूर: pastebin.com/dtfnw2Tv । यह लगभग किसी भी प्रणाली पर कुछ कार्यक्रमों के साथ हुआ है, हालांकि, मैंने यह माना है कि यह सिस्टम कॉन्फ़िगरेशन से संबंधित नहीं था।
पागल

5

निम्नांकित के रूप में बस libc.so.6 फ़ाइल में सिमलिंक जोड़ें:

sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6

सिस्टम पर अभी भी अन्य लापता फ़ाइलों के लिए वही जाता है, मेरे मामले में मतलाब फाइल को याद कर रहा था, अब समस्या दूर हो गई है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.