מצא את הספריות המשותפות של תוכנית באמצעות הפקודה 'ldd'
להשתמש ב ldd פקודה כדי להציג את הספריות המשותפות הנדרשות על ידי כל תוכנית נתונה. הפקודה ldd שימושית לאימון כאשר יש תלות חסרה. ה פקודה מפרט גם פונקציות ואובייקטים חסרים.
תחביר הפקודה ldd
שימו לב לנכון תחביר לפקודה ldd כדי למנוע שגיאות:
ldd [אופציה]... קוֹבֶץ...
השתמש באחד או יותר ממתגי הפקודות ldd הזמינים, המוכנסים לנקודה [OPTION] בפקודה לעיל:
- --help: הדפס את העזרה הזו וצא.
- --גרסה: מידע על גרסת הדפסה ויציאה.
- -d, --data-relocs: עיבוד העברות נתונים.
- -r, --function-relocs: עיבוד נתונים והעברת פונקציות.
- -u, --unused: הדפס תלות ישירה שאינה בשימוש.
- -v, --verbose: הדפס את כל המידע.
כיצד להשתמש בפקודה ldd
בצע את הפקודה הבאה כדי לקבל מידע נוסף על תוכנית:
ldd -v /path/to/program/קובץ הפעלה
הפלט מציג מידע על גרסה וכן את הנתיבים והכתובות לספריות המשותפות, כך:
libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

אם קובץ ה-SO אינו קיים כלל, תוכל למצוא את הספריות החסרות באמצעות הפקודה הבאה:
ldd -d נתיב/אל/תוכנית
הפלט דומה לחלק הבא:
linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => לא foundlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

לעולם אל תפעיל את הפקודה ldd נגד תוכנית שאינה מהימנה מכיוון שפקודת ldd עלולה להפעיל אותה. במקום זאת, השתמש בחלופה בטוחה יותר המציגה את התלות הישירות בלבד ולא את כל עץ התלות:
objdump -p /path/to/program | grep NEEDED

כיצד למצוא את הנתיב ליישום
אתה צריך לספק את הנתיב המלא ליישום אם אתה רוצה למצוא את התלות שלו עם ldd, מה שאתה יכול לעשות בכמה דרכים.
לדוגמה, כך מוצאים את הדרך אל פיירפוקס:
מצא / -שם פיירפוקס
הבעיה עם ה פקודה למצואעם זאת, הוא מפרט את קובץ ההפעלה ובכל מקום בו נמצא Firefox, כך:
/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox
גישה זו היא קצת מוגזמת וייתכן שתצטרך להשתמש ב פקודת sudo כדי להעלות את ההרשאות שלך, אחרת סביר להניח שתקבל שגיאות דחיית רשות.
במקום זאת קל יותר להשתמש ב- איפה הפקודה כדי למצוא נתיב של יישום:
איפה פיירפוקס
הפעם הפלט עשוי להיראות כך:
/usr/bin/firefox
/etc/firefox
/usr/lib/firefox

לאחר מכן, כדי למצוא את הספריות המשותפות עבור Firefox, הזן את הפקודה הבאה:
ldd /usr/bin/firefox
הפלט מהפקודה יהיה משהו כזה:
linux-vdso.so.1 (0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)
Linux-vdso.so.1 הוא שם הספרייה והמספר הקבוע הוא הכתובת שאליה הספרייה נטענת בזיכרון.
בקווים רבים, ה => אחרי הסמל מופיע נתיב. זו הדרך לבינארי הפיזי. המספר הקבוע הוא הכתובת שבה נטענת הספרייה.