Як знайти, до якої версії 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

Нехтуйте тим, що я був ідіот - дякую за відповідь!
математик1975

1
Дякую за відповідь. Чи можете ви надати деяку інформацію, про що мені розповідає ldd-вихід? Це означає, що testendianпотрібно GLIBC_2.3 або GLIBC_2.2.5?
бонанса

Я впевнений, це означає, що програмі потрібен GLIBC 2.2.5, а завантажувач бібліотеки ld-linux-x86-64 був створений за допомогою GLIBC_2.3. Тож обоє певним чином. Але візьміть це з зерном солі, як я не знайшов посилання.
con-f-use

Відмінно працює для динамічних виконуваних файлів, але не стільки для статичних! (Мені потрібно , щоб перевірити , що я зв'язування becauses з попередження РСАДПЗ: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.