Uygulamamın hangi libc sürümüne bağlandığını nasıl bulabilirim?


14

G ++ kullanarak bir uygulama oluştururken, açıkça diğer kütüphaneler için (örneğin geçirme gibi -lpthread) bağlanmak için bir kitaplık olarak libc kitaplığını geçirmiyorum . Ben libc so adı olduğunu biliyorum libc.so.6ama bu aslında bir kütüphane değil ama libc başka bir sürümüne (örneğin libc-2.15.so) bir işaretçi gibi bir şey olduğunu biliyorum . Sorum şu: Bilgisayarımda libc'nin birden fazla sürümü olsaydı, hangisinin aslında ile bağlandığını nasıl anlayabilirim libc.so.6.

Yanıtlar:


17

lddseçtiğiniz bir araç olmalıdır. Bu size bağlı bağlantılı kütüphaneyi verir.

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 durumunda .sodosyayı çalıştırabilirsiniz ve kütüphane sürümü söylenecektir.

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.

Ben ldd hakkında biliyordum, ama sadece bir kütüphane çalıştırabileceğini bilmiyordum - teşekkürler. Ne yazık ki kütüphaneyi çalıştırmak benim çıktı sürümü göstermiyor ....
mathematician1975

Aptal olduğumu göz ardı et - cevap için teşekkürler!
mathematician1975

1
Cevap için teşekkürler. Ldd çıktısının bana ne söylediğine dair bilgi verebilir misiniz? Bu testendianGLIBC_2.3 veya GLIBC_2.2.5 gerektiren anlamına mı geliyor ?
bonanza

Eminim, programın GLIBC 2.2.5'e ihtiyacı olduğu ve kütüphane yükleyicisinin ld-linux-x86-64 GLIBC_2.3 ile oluşturulduğu anlamına gelir. Yani her ikisi de bir bakıma. Ama bunu bir tane bulamadım, çünkü referans bulamadım.
con-f-use

Dinamik yürütülebilir dosyalar için harika çalışıyor, ancak statik olanlar için çok fazla değil! : (Ben gcc uyarı becauses olarak bağlanıyor ettiğimi test etmek gerek warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.