Как сделать чтобы в Linux запускаемая программа искала библиотеки рядом с собой?

В линуксе почти не работал. А сейчас написал программу на Qt 5 и хочу сделать ее распространение в виде папки с исполняемым файлом и библиотеками. Насколько я понимаю, по умолчанию при запуске исполняемого файла динамические библиотеки не ищутся рядом с исп. файлом. Сейчас сделал так:
создал папку с нужными динамическими библиотеками типа /home/linux/myLibs,
И создал конфигурационный файл, указывающий что надо искать либы в том числе и в этой папке:
sudo gedit /etc/ld.so.conf.d/MyLibs.conf
содержимое MyLibs.conf:
/home/linux/myLibs
Это работает.

Почему не работает следующий вариант?:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QString app_path = QCoreApplication::applicationDirPath();
    QString abs_app_path = QDir(app_path).absolutePath();
    QString p1 = abs_app_path + "/intel64";
    QString p2 = abs_app_path + "/qtlibs";
    QCoreApplication::addLibraryPath(p1);
    QCoreApplication::addLibraryPath(p2);
    ...
  • Вопрос задан
  • 4044 просмотра
Пригласить эксперта
Ответы на вопрос 6
gbg
@gbg Куратор тега Linux
Любые ответы на любые вопросы
Соберите нормальный пакет с указанием зависимостей. Не делайте из системы пользователя помойку вашими библиотеками.

А вариант ваш не работает потому, что к моменту запуска программы, все эти библиотеки уже должны быть найдены и загружены.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
export LD_LIBRARY_PATH=. уже отменили?
Ответ написан
Комментировать
@demiol
QMAKE_LFLAGS +='-Wl,-rpath,\'\$$ORIGIN/\',-z,origin'

$ORIGIN - путь к исполняемому файлу, вычисляется в runtime, не во время линковки.
«$» в начале нуждается в защите от шелла и make.
Ответ написан
Комментировать
@poxvuibr
Не совсем понятно зачем это нужно, но думаю, что лучше сделать библиотекам статистическую линковку.
Ответ написан
Комментировать
index0h
@index0h
PHP, Golang. https://github.com/index0h
можете заюзать статические библиотеки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы