क्या "ldd 'द्वारा" एक गतिशील निष्पादन योग्य नहीं "फ़ाइल अन्य पुस्तकालयों पर निर्भर है?


9

बस यह सुनिश्चित करना कि मुझे यह अधिकार मिला है - मैं फोन करता हूं

ldd /path/to/executable

और यह "एक गतिशील निष्पादन योग्य नहीं" है। इसका मतलब है कि यह अन्य पुस्तकालयों पर निर्भर नहीं है, सही है? यदि हां, तो क्या इसका मतलब है कि यह निर्भरता की चिंता किए बिना किसी अन्य उबंटू बॉक्स में स्थानांतरित किया जा सकता है?

जवाबों:


3

सही है, लेकिन खाते में लेने के लिए कुछ है।

से lddमैनपेज:

साझा किए गए पुस्तकालयों पर ldd काम नहीं करता है।

ldd कुछ बहुत पुराने a.out प्रोग्रामों के साथ काम नहीं करता है जो कंपाइलर रिलीज़ में ldd के समर्थन को जोड़ने से पहले बनाए गए थे। यदि आप इनमें से किसी एक प्रोग्राम पर ldd का उपयोग करते हैं, तो प्रोग्राम argc = 0 के साथ चलने का प्रयास करेगा और परिणाम अप्रत्याशित होंगे।


3
एक और कारण यह हो सकता है कि बाइनरी 32-बिट सिस्टम के लिए बनाया गया था लेकिन आप इसे 64-बिट सिस्टम पर जाँच रहे हैं।
फर्डिनेंड प्रांटल

@FerdinandPrantl यदि यह 32 बिट के लिए बनाया गया है, तब lddभी 32 बिट पर निर्भर करता है।
कैलमेरियस

@Calmarius सच नहीं है, जब आपके पास मूल 32-बिट libgcc1 नहीं है। बस एक ताजा उबंटू सर्वर इंस्टॉलेशन पर सत्यापित किया गया: 32-बिट बायनेरिज़ को खुश करने के लिए आपको libgcc1: i386 इंस्टॉल करना होगा।
बाज़

1

@ कलाम सही है, यह तब होता है जब आप एक 32 बिट एक्साइ पर विचार करते हैं, यहां तक ​​कि बेसिक 32 बिट लाइब्रेरी के बिना भी।

मैं अपने सिस्टम को अपग्रेड करने का प्रयास कर रहा हूं (12.04 से उबंटू की 16.04 की एक नई स्थापना), मुझे एक पुरानी प्रोपराइटरी 32 बिट सेवा स्थापित करनी होगी avserver, इसके लिए ia32-libs(अब उपलब्ध नहीं) की आवश्यकता है। इस का मतलब है दोनों dpkgऔर apt-getदुखी हैं (जो भी मैं करता हूँ, यह मेरे लिए संकेत देता है apt-get -f install, और अगर मैं कि चलाने के लिए, यह मैं सेवा पैकेज की स्थापना रद्द जोर देते हैं), और मेरी सेवा प्रारंभ नहीं होगा।

यह साबित करने के लिए कि यह 32bit पुस्तकालयों के गुम होने की स्थिति में है, मैंने अपनी पुरानी प्रणाली (Ubuntu 12.04, with ia32-libsऔर 32bit पुस्तकालयों) को चालू कर दिया है /sda2। सुनिश्चित करना /opt(मेरी 32 बिट बाइनरी युक्त) में मुहिम शुरू की गई है /sda2/opt, मैं कर सकता हूं chroot /sda2और lddफिर इरादा कर सकता हूं ।

इसे ठीक करने के लिए, मैं सभी आश्रित पुस्तकालय पैकेजों को मैन्युअल रूप से स्थापित कर सकता था: i386 (आर्च)। हालाँकि मैंने निर्णय लिया कि मेरी निर्भरता क्या थी, यह जानने की कोशिश करने के बजाय, मैंने वाइन (जो ज्यादातर 32 बिट है, स्थापित की है और इसलिए बुनियादी पुस्तकालयों और एक लोड को और अधिक स्थापित करता है जिसकी मुझे वास्तव में आवश्यकता नहीं है, लेकिन मैं इसके साथ ठीक हूं)।

ठीक करने के लिए dpkgऔर apt-get, मैंने /var/lib/dpkg/statusअपनी सेवा के लिए पैकेज ढूंढकर, और हटा दिया ia32-libs। अब dpkgऔर apt-getखुश हैं

किया, lddखुशी से रिपोर्ट: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


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