Interested Article - Soname

В 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

Ссылки

Источник —

Same as Soname