Программирование на Linux C ++: почему соединение .so, сгенерированная исполняемая библиотека зависимостей .so.version - PullRequest
1 голос
/ 18 октября 2019

Использование eclipse для написания программ на C ++ может быть успешно скомпилировано, но динамическая библиотека не найдена при выполнении. Используйте 'ldd' для отображения xxx.12 => not found. Так почему же библиотека зависимостей .so переименована?

1 Ответ

2 голосов
/ 18 октября 2019

Я нашел ответ: опция -Wl указывает компилятору передать последующие аргументы компоновщику. -soname указывает имя сына (сокращение от общего имени объекта) динамической библиотеки. -Wl означает, что следующий параметр - -soname, libhello.so.1 передается непосредственно в соединитель ld для обработки. На самом деле каждая библиотека имеет сонаму. Когда соединитель найдет имя в библиотеке, которую он ищет, он вставит в ссылку двоичное имя в двоичном файле вместо фактического имени файла, который он запускает. Во время выполнения программы программа ищет файл с именем soname, а не именем файла библиотеки. Другими словами, soname является отличительным флагом библиотеки. Основная цель этого - позволить нескольким версиям библиотечных файлов сосуществовать в системе. При именовании библиотечных файлов обычно используется то же имя, что и у сонама. Libxxxx.so.major.minor Где xxxx - это имя библиотеки, Major - номер основной версии, а minor - номер вспомогательной версии. Проще говоря, soname указывает имя библиотеки независимо от имени сгенерированной библиотеки. При установлении соединения имя, указанное soname, добавляется в исполняемый файл, и программа запускается для загрузки библиотеки, указанной soname. имя файла. Поэтому, если программа подключена к недавно обновленной библиотеке, вам нужно только скопировать новую библиотеку в каталог и затем вызвать ее с soname soname. Если библиотека обновлена, но программа все еще использует старую библиотеку ссылок, просто свяжите старое имя библиотеки с новой обновленной библиотекой. Ключевая функция soname заключается в том, что он обеспечивает стандарт совместимости: когда вы хотите обновить библиотеку в системе, а soname новой библиотеки совпадает с soname старой библиотеки, программа генерируется старой библиотекой. ссылка будет по-прежнему нормально работать с новой библиотекой. Эта функция позволяет легко обновлять программы совместно используемой библиотеки и ошибки местоположения в Linux.

В Linux приложение указывает версию нужной библиотеки с помощью soname. Автор библиотеки может объявить, какие версии совместимы, сохранив или изменив soname, что освобождает программиста от конфликта версий совместно используемой библиотеки. Вы можете просмотреть SONAME каждой динамической библиотеки с помощью readelf -d ———————————————— Заявление об авторском праве: Эта статья является оригинальной статьей блоггера CSDN «В поисках мелкой рыбы в море». ", следуя соглашению об авторском праве CC 4.0 BY-SA, перепечатайте исходную ссылку на источник и это заявление. Оригинальная ссылка: https://blog.csdn.net/wang_hufeng/article/details/53899120

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...