ไฟล์รายงานว่า "ไม่ใช่ไฟล์ที่เรียกใช้งานแบบไดนามิก" โดย 'ldd' ขึ้นอยู่กับไลบรารีอื่นหรือไม่


9

แค่ทำให้แน่ใจว่าฉันได้รับสิทธินี้ - ฉันโทร

ldd /path/to/executable

และจะส่งคืน "ไม่ใช่ไฟล์เรียกทำงานแบบไดนามิก" ซึ่งหมายความว่ามันไม่ได้ขึ้นอยู่กับห้องสมุดอื่น ๆ ใช่ไหม? ถ้าเป็นเช่นนั้นหมายความว่าสามารถโอนไปยังกล่อง Ubuntu อื่นโดยไม่ต้องกังวลกับการพึ่งพา?

คำตอบ:


3

ถูกต้อง แต่มีบางอย่างที่ต้องคำนึงถึง

จากlddmanpage:

ldd ไม่ทำงานบน a.out shared library

ldd ไม่ทำงานกับโปรแกรม a.out ที่เก่าแก่มากบางตัวซึ่งสร้างขึ้นก่อนที่การสนับสนุน ldd จะถูกเพิ่มเข้าไปในการเผยแพร่คอมไพเลอร์ หากคุณใช้ ldd กับหนึ่งในโปรแกรมเหล่านี้โปรแกรมจะพยายามรันด้วย argc = 0 และผลลัพธ์จะไม่สามารถคาดเดาได้


3
เหตุผลอื่นอาจเป็นได้ว่าไบนารีนั้นถูกสร้างขึ้นสำหรับระบบ 32 บิต แต่คุณกำลังตรวจสอบบนระบบ 64 บิต
Ferdinand Prantl

@FerdinandPrantl ถ้ามันถูกสร้างขึ้นสำหรับ 32 บิตlddยังคงพิมพ์การอ้างอิง 32 บิต
Calmarius

@Calarius ที่ไม่เป็นจริงเมื่อคุณไม่มี libgcc1 พื้นฐาน 32 บิต เพิ่งตรวจสอบในการติดตั้งเซิร์ฟเวอร์ Ubuntu ใหม่: คุณต้องติดตั้ง libgcc1: i386 เพื่อให้ ldd มีความสุขสำหรับไบนารี 32 บิต
falstaff

1

@Calarius ถูกต้องสิ่งนี้จะเกิดขึ้นหากคุณพิจารณา 32 บิต exe โดยไม่ต้องมีไลบรารี 32 บิตพื้นฐาน

ฉันพยายามอัพเกรดระบบของฉัน (ติดตั้ง Ubuntu ใหม่ 16.04 จาก 12.04) ฉันต้องติดตั้งบริการ 32 บิต propitiatory เก่าavserverที่ต้องใช้ia32-libs(ไม่สามารถใช้ได้อีกต่อไป) ซึ่งหมายความว่าทั้งสองdpkgและapt-getไม่พึงพอใจ (ไม่ว่าฉันจะทำอะไรจะแจ้งให้ฉันทราบapt-get -f installและหากฉันเรียกใช้มันจะยืนยันว่าฉันถอนการติดตั้งแพ็คเกจบริการ) และบริการของฉันจะไม่เริ่มต้น

เพื่อพิสูจน์ว่าเรื่องนี้จะลงไปหายไปห้องสมุด 32bit ผมได้ติดตั้งระบบเก่าของฉัน (Ubuntu 12.04 ด้วยia32-libsและ 32bit ห้องสมุด) /sda2บน เพื่อให้แน่ใจว่า/opt(ที่มีไบนารี 32 บิตของฉัน) ติดตั้งอยู่/sda2/optฉันสามารถchroot /sda2และlddทำงานได้ตามที่ต้องการ

ในการแก้ไขปัญหานี้ฉันสามารถติดตั้งแพ็กเกจไลบรารีที่ขึ้นต่อกันทั้งหมดด้วยตนเอง: i386 (arch) อย่างไรก็ตามฉันตัดสินใจที่จะลองคิดดูว่าการพึ่งพาของฉันคืออะไรฉันติดตั้งไวน์ (ซึ่งส่วนใหญ่เป็นแบบ 32 บิตและติดตั้งไลบรารีพื้นฐานและโหลดมากกว่าที่ฉันไม่ต้องการ แต่ฉันตกลงกับมัน)

ในการแก้ไขปัญหาdpkgและapt-getผมแก้ไขหาแพคเกจสำหรับการให้บริการของฉันและลบออก/var/lib/dpkg/status ia32-libsตอนนี้dpkgและapt-getมีความสุข

เสร็จแล้วlddรายงานอย่างมีความสุข: - root@withnail:/opt/<service path># ldd avserver linux-gate.so.1 => (0xf77a6000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf778f000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7772000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf776b000) libresolv.so.2 => /lib/i386-linux-gnu/libresolv.so.2 (0xf7752000) libcrypt.so.1 => /lib/i386-linux-gnu/libcrypt.so.1 (0xf7720000) libktssl.so.1.0.0 => /opt/<service path>/libktssl.so.1.0.0 (0xf76cb000) libktcrypto.so.1.0.0 => /opt/<service path>/libktcrypto.so.1.0.0 (0xf756b000) libktz.so.1 => /opt/<service path>/libktz.so.1 (0xf7558000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf754f000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf73d8000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7383000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf7366000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf71af000) /lib/ld-linux.so.2 (0x565b1000)


การติดตั้งไวน์เป็นเคล็ดลับที่ฉลาดมากในการรับไลบรารี่ทั้ง 32 บิตที่คุณต้องการ !!
psitae
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.