Надявах се, че всеки динамично свързан 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 изисква символи или не.
Ако го разбирам правилно, това казва, че е възможно да се създават споделени обекти без информация за версията за открит символ. И по този начин може да има препратки към тези символи без задължителна информация за версията.
Моето тълкуване правилно ли е?
Тези случаи обаче трябва да са редки, тъй като защо компилаторът/линкерът не включва информация за версията?