Связывание с версионным .so без SONAME

У меня есть библиотека с закрытым исходным кодом, которая находится в файле с именем libfoo.so.1.2.3.4. objdump -p показывает, что у него нет SONAME, но есть RPATH=/usr/local/lib.

Это плохая практика? Должен ли я пытаться подтолкнуть авторов библиотеки к изменению параметров?

Как я должен связать свой код с ним? Я не хочу изменять какую-либо общесистемную конфигурацию или загрязнять каталоги, доступные для записи только root.

Я создал фиктивный файл a.c с пустым main() и попытался связать его с gcc a.c -L. -lfoo. Это терпит неудачу. Если я создаю символическую ссылку libfoo.so -> libfoo.1.2.3.4.so вручную и устанавливаю export LD_LIBRARY_PATH=$(pwd), она работает, а ldd говорит libfoo.so => {correct path}.

Так что это работает, но это рекомендуемый способ?


person nponeccop    schedule 02.11.2014    source источник


Ответы (1)


Это плохая практика?

Не сам по себе, нет. Однако вполне вероятно, что авторы библиотеки невежественны, особенно если вы следовали их процедуре установки и в итоге получили libfoo.so.1.2.3.4, но без символической ссылки.

Должен ли я пытаться подтолкнуть авторов библиотеки к изменению параметров?

Возможно. Отсутствие установки SONAME и установка RPATH сами по себе неплохи, но отсутствие символической ссылки, безусловно, плохо.

установить export LD_LIBRARY_PATH=$(pwd)

Это вообще плохая идея. Вам следует кодировать правильный RPATH в двоичный файл (и только двоичный файл), который использует библиотеку. В Linux вы можете добиться этого с помощью -Wl,--rpath=$(pwd).

person Employed Russian    schedule 02.11.2014