ldd ที่มีไบนารี 32 บิตบนระบบ 64 บิต - ทำงาน แต่จะไม่รายงาน


3

ลิงค์ของฉันอยู่ใน

/lib{32,64}/ld-2.20.soมีลิงก์สัญลักษณ์ที่

/lib32/ld-linux.so.2 และ

/lib64/ld-linux-x86-64.so.2 (ตามความเหมาะสม ld-2.20.so s)

เมื่อฉันพยายามรันไบนารี 32 บิตทุกอย่างดี พวกเขารวบรวมปรับ (ฉันใช้ gcc แก้ไขเล็กน้อย specs ไฟล์) และดูเหมือนว่าการเชื่อมโยงที่ดีและทำงานได้ดี

เมื่อฉันลอง ldd /path/to/example/32bit/binaryฉันบอกแล้ว not a dynamic executable. ความเข้าใจของฉันคือว่านี่เป็นเพราะไม่สามารถหา linker เพื่อเปิดปฏิบัติการ

readelf -l example_binary | grep interpreter จะช่วยให้ [Requesting program interpreter: /lib32/ld-linux.so.2], อย่างที่คาดไว้.

ความคิดใดที่ทำให้เกิดเหตุการณ์นี้ / ฉันจะแก้ไขได้อย่างไร

ป.ล. - "ติดตั้งไลบรารีความเข้ากันได้แบบ 32 บิตโดยใช้ sudo apt get ... " ไม่มีประโยชน์เนื่องจากไม่มี apt / pacman / etcetera ถ้าฉันต้องการติดตั้งไลบรารีเฉพาะ (32 บิต) ใหม่การรู้ว่ามันจะมีประโยชน์!

P.p.s - ไฟล์สคริปต์ที่ติดตั้งโดย gcc ที่ /usr/lib{32,64}/libc.so จัดกลุ่มที่เหมาะสม (จริง) libc.so.6 และ libc_nonshared.a ไฟล์ด้วย AS_NEEDED ( /lib32/ld-linux.so.2 ) ) ที่ส่วนท้ายของ lib32

คำตอบ:


2

ปรากฎว่ามันค่อนข้างง่าย

/usr/bin/ldd เป็นเพียงไฟล์สคริปต์

การเปิดไฟล์สคริปต์แสดงบรรทัดใกล้ด้านบนซึ่งเริ่มอ่าน (ในระบบของฉัน):

RTLDLIST="/lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2".

การเปลี่ยนบรรทัดนี้เป็น RTLDLIST="/lib32/ld-linux.so.2 /lib64/..." แก้ไขปัญหาได้ทันที

ป.ล. (เพิ่มที่นี่ในกรณีที่ช่วยคนอื่นที่พยายามติดตั้ง gobject-introspection) โซลูชันนี้มีประโยชน์เช่นกันหากพยายามติดตั้ง gobject-introspection ldd เพื่อแก้ไขไลบรารี

ข้อความแสดงข้อผิดพลาดที่ฉันได้รับ: ERROR: can't resolve libraries to shared libraries: gobject-2.0, glib-2.0

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