Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

Обращение к *.so по относительному пути

Есть библиотека libsvsynth.so, идущая в комплекте с программой, которая её использует. Т.к. библиотека не устанавливается в систему (программа задумывалась, как физически переносимая), то к путь к ней в функции dlopen описывается как ./libsvsynth.so
При использовании:
$ ./prog
Всё работает - библиотека подключается. Однако, если написать
$ ./parent_dir/prog
То библиотека программой обнаружена не будет (как я понял, библиотека будет искаться в вызываемом каталоге)
Что же нужно сделать для того, чтобы программу можно было запускать без проблем из любого места, а не только из каталога с бинарником+библиотекой?


Ответ

Итак, проблема была решена следующим образом: к программе всё же пришлось добавить shell-скрипт (start.sh) следующего содержания:
#!/bin/bash SOURCE="${BASH_SOURCE[0]}" while [ -h "$SOURCE" ]; do DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" SOURCE="$(readlink "$SOURCE")" [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" done DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" cd $DIR ./prog $@
Затем делаем chmod +x ./start.sh и запускаем из любого каталога в системе

Комментариев нет:

Отправить комментарий