Как загрузить библиотеку с суффиксом - PullRequest
0 голосов
/ 06 января 2019

Мне нужно загрузить предварительно установленный общий объект с помощью dlopen. Скажем, у него есть имя somelib.so

В некоторых системах есть lib с несколькими ссылками: somelib.so, somelib.so.1, somelib.so.321.1

В других системах есть только lib без ссылок: somelib.so.321.1 Как правильно загрузить эту библиотеку?

Я делаю dlopen с именем 'somelib.so', и это работает только в тех системах, где эта ссылка существует.

Является ли единственная опция для поиска полного имени библиотеки, если в системе отсутствует ссылка по умолчанию ('somelib.so')?

1 Ответ

0 голосов
/ 18 января 2019

Это зависит от контекста: плагины, предназначенные для загрузки через dlopen, обычно поставляются без номеров версий, например, /usr/libexec/apache2/mod_something.so.

Обычные разделяемые библиотеки обычно имеют версии:

libfoo.so.Majorversion.Minoversion
libfoo.so.Majorversion
libfoo so

Часть Minorversion может быть изменена без уведомления, это означает, что совместимо . Если часть Majorversion изменяется, она (может быть) в несовместимом изменении. Поэтому я предлагаю вам использовать в dlopen вторую версию, например libz.so.1 not libz.so или libz.so.1.2.11.

(Для усложнения можно структурировать как Majorversion, так и Minorversion, например Major = '1.1' Minor = '1.a')

...