2013-08-21 2 views
10

क्या कोई मुझे ldd कमांड के आउटपुट की व्याख्या कर सकता है? निम्न उदाहरण (Gentoo सिस्टम पर)ldd आउटपुट का स्पष्टीकरण

$ ldd /bin/date 
    linux-vdso.so.1 => (0x00007fff6ffff000) 
    librt.so.1 => /lib64/librt.so.1 (0x00007f54ba710000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f54ba384000) 
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f54ba167000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007f54ba919000) 

में पहली पंक्ति क्या मतलब है? "Linux-vdso.so.1 => (0x00007fff6ffff000)" => किसी भी साझा लाइब्रेरी फ़ाइल को इंगित नहीं करता है।

+0

संभावित डुप्लिकेट [लड आउटपुट को समझना] (http://stackoverflow.com/questions/5554343/understanding-ldd-output) –

उत्तर

12

उस आउटपुट का सबसे महत्वपूर्ण हिस्सा linux-vdso है। वीडीएसओ Virtual Dynamic Shared Object के लिए खड़ा है - यह उपयोगकर्ताओं के स्थान पर कर्नेल स्पेस रूटीन निर्यात करने का एक तरीका है। सिस्टम कॉल ओवरहेड को कम करने का मुख्य कारण है। आम तौर पर जब एक सिस्टम कॉल होता है तो उसे कुछ महंगा संचालन की आवश्यकता होती है जैसे कि उपयोगकर्ता से कर्नेल में स्विचिंग मोड, यूजर स्पेस से कर्नेलस्पेस आदि तक डेटा कॉपी करना। ओवरडहेड वीडीएसओ के इन प्रकारों को कम करने के लिए, केवल वीडीओ मेमोरी स्पेस परिणाम को पढ़कर निकाला जा सकता है यानी एक वास्तविक सिस्टम कॉल किए बिना gettimeofday() के लिए संभव है!

नोट, सभी सिस्टम कॉलों में वीडीएसओ समर्थन नहीं है, केवल सिस्टम कॉल जैसे getcpu(), gettimeofday(), time() आदि जो इन चीजों को पूरा करने का एक बेहद तेज़ तरीका है। इसके अलावा स्मृति पता linux-vdso.so.1 अंक यादृच्छिक है, विभिन्न ldd invocation पर आप linux-vdso.so.1 अंक को विभिन्न स्मृति स्थान पर देखेंगे। ऐसा इसलिए किया गया है कि कोई भी सामने के पते की भविष्यवाणी नहीं कर सकता है।

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