Мегатомы
- 1 year ago
- 0
- 0
В Unix и Unix-подобных операционных системах это — поле данных, генерируемое в файлах разделяемых библиотек . Это поле генерируется компоновщиком и впоследствии используется динамическим загрузчиком , чтобы определить, какую версию разделяемой библиотеки нужно загрузить в память для вызываемой программы. В это поле записывается имя разделяемой библиотеки вместе с мажорным номером версии. Если некоторая программа компонуется с некоторой разделяемой библиотекой, то в её загрузочном файле сохраняется soname библиотеки, чтобы отдать инструкцию загрузчику.
Soname используется главным образом, чтобы указать на совместимость разных версий одной и той же разделяемой библиотеки. Например, версия библиотеки
libx.so.1.3
будет иметь одинаковое значение soname с версией библиотеки
libx.so.1.9
, а именно
libx.so.1
. Это связано с тем, что между этими версиями в библиотеке не меняется программный интерфейс, поэтому можно подменять старую версию библиотеки более новой без опасений, что скомпонованная программа, которая её использует, не будет запускаться. Но версии библиотеки
libx.so.5
и
libx.so.6
уже не совместимы между собой.
GNU-компоновщик
использует опцию
-h
name
или
-soname=
name
, чтобы сгенерировать поле
DT_SONAME
в файле библиотеки. Просмотреть это поле для собранной библиотеки можно утилитой
Objdump
, например:
$ objdump -p libstdc++.so | grep SONAME
SONAME libstdc++.so.6