Русская Википедия:Soname
В Unix и Unix-подобных операционных системах это — поле данных, генерируемое в файлах разделяемых библиотек. Это поле генерируется компоновщиком и впоследствии используется динамическим загрузчиком, чтобы определить, какую версию разделяемой библиотеки нужно загрузить в память для вызываемой программы. В это поле записывается имя разделяемой библиотеки вместе с мажорным номером версии. Если некоторая программа компонуется с некоторой разделяемой библиотекой, то в её загрузочном файле сохраняется soname библиотеки, чтобы отдать инструкцию загрузчику.
Soname используется главным образом, чтобы указать на совместимость разных версий одной и той же разделяемой библиотеки. Например, версия библиотеки libx.so.1.3
будет иметь одинаковое значение soname с версией библиотеки libx.so.1.9
, а именно libx.so.1
. Это связано с тем, что между этими версиями в библиотеке не меняется программный интерфейс, поэтому можно подменять старую версию библиотеки более новой без опасений, что скомпонованная программа, которая её использует, не будет запускаться. Но версии библиотеки libx.so.5
и libx.so.6
уже не совместимы между собой.
GNU-компоновщик использует опцию -hname
или -soname=name
, чтобы сгенерировать поле DT_SONAME
в файле библиотеки. Просмотреть это поле для собранной библиотеки можно утилитой Objdump, например:
$ objdump -p libstdc++.so | grep SONAME
SONAME libstdc++.so.6
Ссылки
- linuxquestions.org wiki
- System V ABI (4.1)
- Libtool's versioning scheme
- IBM developerWorks article "Shared objects for the object disoriented!" covering shared libraries including naming conventions.