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