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.

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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.