2016-09-15 3 views
2

Я смотрю вывод команды «nm» для общей библиотеки в Linux. Я вижу этоЧто означает символ «@@» на выходе команды nm?

U [email protected]@GLIBC_2.0 

Означает ли это, что stderr жестко привязан к glibc2.0? Причина, по которой я прошу об этом, у нас есть набор библиотек (скажем, a1.so, a2.so, ...), которые построены на одной из разных версий наших экспортируемых библиотек (скажем, ex.so.1, ex.so.2). Экспортированные библиотеки экспортируют функцию, например foo. Когда загружаются библиотеки a * .so, они каким-то образом волшебным образом исправляют соответствующие функции внутри библиотек, из которых они были созданы. Я вижу вывод nm для разных библиотек, как показано ниже.

nm a1.so | grep foo 
U [email protected]@ex.1 

nm a2.so | grep foo 
U [email protected]@ex.2 

Какую роль играет здесь '@@'? Я не мог найти документацию о «@@». Любые ссылки были бы полезными.

+0

Это символьная версия. Библиотека, подобная glibc, может содержать несколько версий одного и того же символа. –

+0

Статья 3 этого [https://www.akkadia.org/drepper/dsohowto.pdf) статьи Ульриха Дреппера более подробно освещена. –

+0

Спасибо @ н.м. и Бретт Хейл. Я просмотрю газету. –

ответ

2

@ позволяет указать версию для символа. Когда существует несколько определений символа, у них будут разные версии. Для указания версии по умолчанию используется @@. Версия по умолчанию выбирается, если не указана явная версия.

Более подробную информацию можно найти в binutils VERSION documentation (поиск по «@@»).