Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

การใช้คำสั่ง ldd ใน Linux

ใช้ ldd คำสั่งแสดงไลบรารีที่แบ่งใช้ตามโปรแกรมที่กำหนด คำสั่ง ldd มีประโยชน์สำหรับการทำงานเมื่อไม่มีการพึ่งพาอาศัยกัน คำสั่งยังแสดงรายการฟังก์ชันและอ็อบเจ็กต์ที่ขาดหายไป

ไวยากรณ์คำสั่ง ldd

สังเกตไวยากรณ์ที่เหมาะสมสำหรับคำสั่ง ldd เพื่อหลีกเลี่ยงข้อผิดพลาด:

ldd [OPTION]... FILE...

ใช้สวิตช์คำสั่ง ldd ที่มีอยู่อย่างน้อยหนึ่งตัว โดยแทรกลงในจุด [OPTION] ในคำสั่งด้านบน:

  • --help:พิมพ์วิธีใช้นี้แล้วออก
  • --version:พิมพ์ข้อมูลเวอร์ชันและออก
  • -d, --data-relocs:ดำเนินการย้ายข้อมูล
  • -r, --function-relocs:ประมวลผลข้อมูลและย้ายตำแหน่งฟังก์ชัน
  • -u, --unused:พิมพ์การพึ่งพาโดยตรงที่ไม่ได้ใช้
  • -v, --verbose:พิมพ์ข้อมูลทั้งหมด

วิธีใช้คำสั่ง ldd

ดำเนินการคำสั่งต่อไปนี้เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรม:

ldd -v /path/to/program/executable

ผลลัพธ์จะแสดงข้อมูลเวอร์ชันตลอดจนเส้นทางและที่อยู่ไปยังไลบรารีที่ใช้ร่วมกัน ดังนี้:

libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
การใช้คำสั่ง ldd ใน Linux

หากไม่มีไฟล์ SO เลย คุณสามารถค้นหาไลบรารีที่หายไปได้โดยใช้คำสั่งต่อไปนี้:

ldd -d path/to/program

ผลลัพธ์จะคล้ายกับต่อไปนี้:

linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => not foundlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
การใช้คำสั่ง ldd ใน Linux

อย่าเรียกใช้คำสั่ง ldd กับโปรแกรมที่ไม่น่าเชื่อถือ เนื่องจากคำสั่ง ldd อาจดำเนินการได้ ให้ใช้ทางเลือกที่ปลอดภัยกว่าซึ่งแสดงการพึ่งพาโดยตรงเท่านั้น ไม่ใช่โครงสร้างการพึ่งพาทั้งหมด:

objdump -p /path/to/program | grep NEEDED
การใช้คำสั่ง ldd ใน Linux

วิธีค้นหาเส้นทางไปยังแอปพลิเคชัน

คุณต้องระบุเส้นทางแบบเต็มไปยังแอปพลิเคชันหากต้องการค้นหาการพึ่งพาด้วย ldd ซึ่งคุณสามารถทำได้หลายวิธี

ตัวอย่างเช่น วิธีค้นหาเส้นทางไปยัง Firefox:

find / -name firefox

อย่างไรก็ตาม ปัญหาของคำสั่ง find คือมันแสดงรายการปฏิบัติการและทุกที่ที่ Firefox ตั้งอยู่เช่นนี้:

/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox

วิธีการนี้ใช้ทักษะมากเกินไป และคุณอาจต้องใช้คำสั่ง sudo เพื่อยกระดับสิทธิ์ของคุณ ไม่เช่นนั้นคุณอาจได้รับข้อผิดพลาดจากการปฏิเสธการอนุญาตจากบุคคล

ง่ายกว่าที่จะใช้คำสั่ง whereis เพื่อค้นหาเส้นทางของแอปพลิเคชัน:

whereis firefox

คราวนี้ผลลัพธ์อาจมีลักษณะดังนี้:

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
การใช้คำสั่ง ldd ใน Linux

จากนั้น หากต้องการค้นหาไลบรารีที่ใช้ร่วมกันสำหรับ 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 คือชื่อของไลบรารี และเลขฐานสิบหกคือที่อยู่ที่โหลดไลบรารีลงในหน่วยความจำ

ในหลายบรรทัด => สัญลักษณ์ตามด้วยเส้นทาง นี่คือเส้นทางสู่เลขฐานสองทางกายภาพ เลขฐานสิบหกคือที่อยู่ที่โหลดไลบรารี