Soname (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