При связывании с неопределенной версией библиотеки правильный выбор?

С strace я вижу, что программе нужна некоторая неопределенная версия библиотеки gmp :

 open("/lib/x86_64-linux-gnu/libgmp.so", O_RDONLY|O_CLOEXEC) = \ -1 ENOENT (No such file or directory) 

Я думаю, что он должен быть связан с конкретной версией интерфейса (например, libgmp.so.10 например).

Однако это не похоже на обычную практику. Это случайно или есть веская причина полагаться на неуказанную версию?

Единственным приемлемым случаем, о котором я могу думать, является дистрибутив ОС: вы строите (и контролируете) каждый пакет.

  • Что вдруг заставит программы читать /etc/ld.so.preload при запуске?
  • Можно ли загружать две библиотеки общих ресурсов приложения во время выполнения?
  • Debian: Как разрешить ошибку перемещения?
  • Ошибка undefined ошибки Mkfs: ext2fs_numeric_progress_ops
  • libcurl.so.4 неопределенная опорная ошибка
  • Почему ldd не показывает пути имен файлов для зависимостей?
  • Могу ли я использовать свой собственный ld.so.cache?
  • Найти, где символ общей библиотеки, определенный в живой системе, / список всех символов, экспортированных в систему
  • One Solution collect form web for “При связывании с неопределенной версией библиотеки правильный выбор?”

    Я бы не сказал «неприемлемый», но для двоичного файла определенно необычно искать общую библиотеку под простым *.so именем во время выполнения. Как правило:

    • Компилятор (время сборки) ищет библиотеки под именами, соответствующими *.so
    • Если найден, линкер обращается к полю SONAME библиотеки, чтобы узнать имя, которое должна быть расположена в библиотеке во время выполнения
    • Он записывает это имя внутри встроенного двоичного файла, чтобы он выполнялся во время выполнения.

    Цель этого соглашения заключается в том, что двоичный файл может быть привязан к конкретной версии API-библиотеки.

    Возможно, библиотека, о которой идет речь, не использует это соглашение. Чтобы проверить, содержит ли библиотека поле SONAME:

     objdump -p /lib/`arch`-linux-gnu/libthing.so | fgrep SONAME 

    Если SONAME не существует, тогда двоичные файлы, связанные с этой библиотекой, по умолчанию будут использовать имя, под которым библиотека была найдена во время сборки (которая равна *.so ). Это может быть то, что вы видите. Если существует SONAME, тогда двоичные файлы, связанные с этой библиотекой, должны были использовать это имя во время выполнения.

    Interesting Posts

    Удаление цветовых кодов из вывода

    lsof vs cat / proc / … / maps

    SSH на два адреса, используйте тот, который подключается первым

    MOTD не отображается после установки openssh из источника

    Как запросить, какой пакет RPM предоставляет определенную версию

    LMDE не загружается непосредственно после установки, но загружается с опции cd «загрузка с локального жесткого диска»,

    Cronjob (ы) для нескольких пользователей

    Как выводить файлы в другой каталог (Poppler – pdftotext)

    После установки драйверов Nvidia пользовательский интерфейс GNOME не показывает

    Скомпилированный GNU / Nano: как добавить в список системных редакторов

    Включение завершения с вкладкой на старом ksh на SystemV

    Проверьте, запущен ли zshrc / sourced

    Выберите файл на основе количества строк и обработайте результат

    Что произойдет, если мы подключим файловую систему, в которой работает e2fsck?

    Инструмент для создания только встроенного исходного кода

    Linux и Unix - лучшая ОС в мире.