Я надеялся, что каждый динамически связанный двоичный файл ELF имеет
- раздел
.gnu.version_r
(или другой раздел с тегомDT_VERNEED
), и что - этот раздел содержит необходимую версию для каждого символа, импортированного из динамически связанного общего объекта.
Тем не менее, похоже, возможны случаи, когда компилятор / компоновщик добавляет запись DT_NEEDED
(то есть встраивает имя требуемого общего объекта) без какой-либо требуемой информации о версии.
Ближайшие утверждения, которые я смог найти, были в Стандартная базовая базовая спецификация ядра Linux 3.1
Все объекты ELF могут предоставлять или зависеть от версионных символов.
и, немного точнее, в http://www.akkadia.org/drepper/symbol-versioning:
Реализация позволяет каждому DSO либо использовать версии для своих символов, либо нет. В зависимости от того, имеет ли объект DSO, с которым связан объект, символы или нет, ссылка на DSO требует символов или нет.
Если я правильно понимаю, это говорит о том, что можно создавать общие объекты без информации о версии для открытого символа. Таким образом, могут быть ссылки на эти символы без обязательной информации о версии.
Моя интерпретация верна?
Однако эти случаи должны быть редкими, поскольку почему компилятор / компоновщик не включает информацию о версии?