Как определить, от чего будет зависеть версия бинарника glibc (glibcxx)?

Хорошо известно, что glibc (и, насколько мне известно, glibstd ++ также) использует механизм управления версиями символов. (Подробнее см .: Как я могу ссылаться на конкретный glibc версия.)

Вопрос в том, как определить точные версии GLIBC и GLIBCXX, которые будут выбраны компоновщиком для имен из libc и libstdc ++? Например, как получить что-то вроде этого:

time -> time@GLIBC_2_5
...
gethostbyname -> gethostbyname@GLIBC_2_3

Почему нам это надо? Мне кажется, это может быть полезно, если вы хотите минимизировать требуемые версии glibc / libstdc ++.


person Shcheklein    schedule 08.08.2010    source источник
comment
IIRC dso-howto (akkadia.org/drepper/dsohowto.pdf) имел раздел об использовании для этого сценариев компоновщика.   -  person ninjalj    schedule 09.08.2010


Ответы (1)


Вы можете попробовать запустить objdump -T в своем двоичном файле.

Если вы рассматриваете возможность ссылки на более старые версии символов, имейте в виду, что эти более старые версии могут зависеть от более старых, других структур или других определений. Чтобы этого избежать, компилируйте и связывайте с более старыми соответствующими заголовочными файлами и библиотеками.

person jilles    schedule 08.08.2010
comment
Спасибо, джилль. Оно работает. Еще один вопрос, как получить место в коде, из которого вызывается динамический символ? Я имею в виду, например, если 'objdump -T' возвращает некоторую запись, скажем, GLIBCXX_3.4.9 Insert_, как понять, какие функции в источниках используют этот символ? - person Shcheklein; 09.08.2010
comment
хм, я действительно не знаю лучшего решения, чем запустить objdump -t для всех файлов .o и проверить, какие из них содержат ссылки на функцию. Кажется, что это можно сделать лучше, поскольку компоновщик знает, где был использован неразрешенный символ. - person jilles; 11.08.2010
comment
Я бы только добавил, что для общих библиотек objdump -T не работает, и я использую решение ldd -v somelibrary.so (-v важно), которое было описано на askubuntu.com/questions/ 163138 / - person Alexander Samoylov; 17.02.2020