2013-05-29 5 views
12

पर काम नहीं करता है मेरे पास एक बाइनरी है जो .so फ़ाइलों का एक समूह का उपयोग करती है।ldd गतिशील रूप से जुड़े बाइनरी

bash-3.00$ file foo 
foo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.21, dynamically linked (uses shared libs), not stripped 

लेकिन अगर मैं इस फाइल पर ldd चलाने के लिए, अपने .so लेने के लिए सक्षम नहीं फ़ाइलें बाइनरी पर निर्भर है। '

bash-3.00$ ldd foo 
     not a dynamic executable 
bash-3.00$ 

readelf द्विआधारी द्वारा इस्तेमाल किया साझा पुस्तकालयों की सूची दिखाने के लिए है ..

bash-3.00$ readelf -d foo 
Dynamic segment at offset 0x17c810 contains 70 entries: 

    Tag  Type       Name/Value 
0x00000001 (NEEDED)      Shared library: [libdl.so.2] 

क्यों नहीं है इस मामले में पुस्तकालय निर्भरता को लेने के लिए सक्षम LDD?

+7

आप शायद 64-बिट वातावरण पर हैं। 32-बिट संगतता libs को स्थापित करना समस्या को ठीक करना चाहिए। – devnull

+4

धन्यवाद। वह यह था। उबंटू में मैं ia32-libs और ldd काम करने में सक्षम हूं। लेकिन रेडहाट में ऐसा लगता है कि 32 बिट संगतता libs को स्थापित करने का कोई तेज़ और आसान तरीका नहीं है। – Manohar

उत्तर

5

टिप्पणी में से एक की तरह कहते हैं - आपने 64-बिट ईएलएफ ऑब्जेक्ट का निरीक्षण करने के लिए 64 बिट सिस्टम पर ldd का उपयोग करने का प्रयास किया। ldd निर्भरता का पता लगाने के लिए मानक गतिशील लिंकर का उपयोग करता है, इसलिए यदि आपके प्लेटफ़ॉर्म में ईएलएफ ऑब्जेक्ट का निरीक्षण करने के लिए आवश्यक लिंकर नहीं है, तो ldd विफल हो जाता है। इन परिस्थितियों में पढ़ें और objdump अधिक मजबूत हैं।

4

ध्यान दें कि फेडोरा 21 में, ldd फ़ाइलों .so 32 बिट की पहचान करने के लिए, मैं निम्नलिखित स्थापित करने के लिए किया था:

sudo yum install glibc.i686 libgcc.i686 libstdc++.i686 glibc-devel.i686 

मुझे यकीन है कि नहीं कर रहा हूँ जो "नहीं एक गतिशील निष्पादन तय उन में से एक "त्रुटि मैं ldd में देख रहा था।

+1

यहां (CentOS7 पर) vxworks 6.9 'deflate' निष्पादन योग्य के लिए यह काम करने के लिए केवल 'yum install glibc.i686' की आवश्यकता थी। – Jens

संबंधित मुद्दे