ฉันจะหาแอปพลิเคชั่น libc ของฉันที่เป็นลิงค์ไปได้อย่างไร?


14

เมื่อสร้างแอปพลิเคชันโดยใช้ g ++ ฉันไม่ได้ผ่านไลบรารี libc อย่างชัดเจนเพื่อเชื่อมโยงไปยังไลบรารีในลักษณะเดียวกับที่คุณทำกับไลบรารีอื่น ๆ (เช่นส่ง-lpthreadตัวอย่าง) ฉันรู้ว่า libc มีชื่อดังนั้นlibc.so.6แต่ฉันรู้ว่านี่ไม่ใช่ห้องสมุดจริง ๆ แต่มีบางอย่างที่เหมือนกับตัวชี้ไปยัง libc เวอร์ชันอื่น (เช่นlibc-2.15.so) คำถามของฉันคือถ้าผมมีหลายรุ่นของ libc libc.so.6บนคอมพิวเตอร์ของฉันว่าฉันสามารถบอกที่หนึ่งจริงได้รับการเชื่อมโยงกับผ่าน

คำตอบ:


16

lddควรเป็นเครื่องมือที่คุณเลือก นั่นทำให้คุณแชร์ไลบรารีที่เชื่อมโยงกับคุณจริง ๆ

confus@confusion:~/misc/test$ ldd -r -v testendian
    linux-vdso.so.1 =>  (0x00007fffbcfff000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a5a4c5000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1a5a8a5000)

    Version information:
    ./testendian:
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

ในกรณีของ libc คุณสามารถเรียกใช้.soไฟล์และจะแจ้งรุ่นของไลบรารี

confus@confusion:~/misc/test$ /lib/x86_64-linux-gnu/libc.so.6 
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.

ฉันรู้เกี่ยวกับ ldd ไม่รู้ว่าคุณสามารถเรียกใช้ไลบรารีได้ - ขอบคุณ น่าเสียดายที่ผลลัพธ์ของฉันจากการรัน
mathematician1975

ไม่สนใจว่าฉันเป็นคนงี่เง่า - ขอบคุณสำหรับคำตอบ!
mathematician1975

1
ขอบคุณสำหรับคำตอบ. คุณสามารถให้ข้อมูลบางอย่างที่เอาต์พุต ldd บอกฉันได้ไหม หมายความว่าtestendianต้องใช้ GLIBC_2.3 หรือ GLIBC_2.2.5 หรือไม่
โบนันซ่า

ฉันค่อนข้างแน่ใจว่ามันหมายความว่าโปรแกรมต้องการ GLIBC 2.2.5 และไลบราเดอร์ตัวโหลดld-linux-x86-64 นั้นถูกสร้างด้วย GLIBC_2.3 ดังนั้นทั้งสองวิธี แต่เอาไปด้วยเม็ดเกลือเพราะฉันไม่พบการอ้างอิง
con-f-use

ใช้งานได้ดีเยี่ยมสำหรับ executables แบบไดนามิก แต่ไม่มากสำหรับแบบคงที่! (ผมต้องทดสอบสิ่งที่ฉันเชื่อมโยงกับ becauses ของคำเตือน GCC: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.