Как мне узнать, на какую версию 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-использование

Отлично работает для динамических исполняемых файлов, но не так много для статических! (Мне нужно проверить то , что я связыванние becauses из предупреждения GCC: 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.