מצא את הספריות המשותפות של תוכנית באמצעות הפקודה '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)
פקודת Linux ldd

אם קובץ ה-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)
פקודת Linux ldd חסרה

לעולם אל תפעיל את הפקודה ldd נגד תוכנית שאינה מהימנה מכיוון שפקודת ldd עלולה להפעיל אותה. במקום זאת, השתמש בחלופה בטוחה יותר המציגה את התלות הישירות בלבד ולא את כל עץ התלות:

objdump -p /path/to/program | grep NEEDED
Linux objdump ldd חלופה

כיצד למצוא את הנתיב ליישום

אתה צריך לספק את הנתיב המלא ליישום אם אתה רוצה למצוא את התלות שלו עם 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 הוא שם הספרייה והמספר הקבוע הוא הכתובת שאליה הספרייה נטענת בזיכרון.

בקווים רבים, ה => אחרי הסמל מופיע נתיב. זו הדרך לבינארי הפיזי. המספר הקבוע הוא הכתובת שבה נטענת הספרייה.