Bagaimana cara menemukan versi libc yang ditautkan dengan aplikasi saya?

14

Saat membangun aplikasi menggunakan g ++, saya tidak secara eksplisit meneruskan perpustakaan libc sebagai perpustakaan untuk ditautkan dengan cara yang sama seperti yang Anda lakukan untuk perpustakaan lain (seperti lewat -lpthreadmisalnya). Saya tahu bahwa libc memiliki nama yang sama libc.so.6tetapi saya sadar bahwa ini sebenarnya bukan perpustakaan tetapi sesuatu seperti pointer ke versi libc lainnya (seperti libc-2.15.so). Pertanyaan saya adalah jika saya memiliki beberapa versi libc di komputer saya, bagaimana saya bisa tahu yang mana yang benar-benar terhubung melalui libc.so.6.

ahli matematika1975
sumber

Jawaban:

16

lddharus menjadi alat pilihan Anda. Itu memberi Anda perpustakaan bersama yang benar-benar ditautkan.

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

Dalam kasus libc Anda cukup menjalankan .sofile dan akan diberi tahu versi perpustakaan.

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.
membingungkan
sumber
Saya tahu tentang ldd, tidak tahu Anda bisa menjalankan perpustakaan - terima kasih. Sayangnya output saya dari menjalankan perpustakaan tidak menunjukkan versi ....
mathematician1975
Abaikan bahwa saya menjadi idiot - terima kasih atas jawabannya!
ahli matematika1975
1
Terima kasih atas jawabannya. Bisakah Anda memberikan beberapa informasi apa yang dikatakan oleh output LDD kepada saya? Apakah itu berarti testendianmembutuhkan GLIBC_2.3 atau GLIBC_2.2.5?
bonanza
Saya cukup yakin, itu berarti bahwa program membutuhkan GLIBC 2.2.5 dan pemuat perpustakaan ld-linux-x86-64 dibangun dengan GLIBC_2.3. Jadi keduanya dengan cara. Tetapi ambil itu dengan sebutir garam, karena saya tidak menemukan referensi.
con-f-use
Bekerja bagus untuk executable dinamis, tetapi tidak terlalu banyak untuk yang statis! (Aku perlu menguji apa yang saya menghubungkan terhadap becauses dari peringatan gcc: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh