LD_LIBRARY_PATH приоритет - PullRequest
       6

LD_LIBRARY_PATH приоритет

5 голосов
/ 20 марта 2011

Я только что наткнулся на какое-то странное поведение: перед тем, как запустить приложение, я установил LD_LIBRARY_PATH в какой-то локальный каталог lib, который содержит все необходимые библиотеки. После запуска у меня есть часть (большая часть) библиотеки загружаются из LD_LIBRARY_PATH, но некоторые загружаются из стандартного / usr / lib (например, /usr/lib/libQtNetwork.so.4, /usr/lib/libSM.so. 6). Все эти библиотеки содержатся в каталоге, который указан в LD_LIBRARY_PATH. Кто-нибудь может объяснить, почему у меня такое поведение? Я не очень знаком с миром Linux, но эта статья говорит, что мой подход должен работать

P.S. Если я переименую / usr / libs во что-то другое, мое приложение будет запущено со всеми используемыми библиотеками из моего местоположения

Спасибо заранее!

Ответы [ 2 ]

3 голосов
/ 21 марта 2011

Я нашел ответ, и ответ RPATH .Все библиотеки Qt построены с RPATH = $ QT_INSTALL_DIR, поэтому RPATH следует удалить, если вы хотите создать «комплект» в Linux. RPATH можно удалить, вызвав команду chrpath .Спасибо всем за помощь!

1 голос
/ 20 марта 2011

Хорошо, кажется, вы используете Qt, но применяются те же принципы и не зависят от Qt.

Первое, на что нужно обратить внимание, это ваша переменная окружения PATH , затем QTDIR, затем LD_LIBRARY_PATH .

Обычно вам не нужно «играть» с LD_LIBRARY_PATH.Если ваш PATH правильный, то с вами все будет в порядке.

В качестве примечания (вы, вероятно, знаете): Чтобы просмотреть используемые библиотеки, вы можете использовать команду ldd .Например:

user@host:~/$ ldd $QTDIR/bin/qmake 
linux-vdso.so.1 =>  (0x00007fff169ff000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007fb6bf63e000)
libm.so.6 => /lib/libm.so.6 (0x00007fb6bf3bb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007fb6bf1a3000)
libc.so.6 => /lib/libc.so.6 (0x00007fb6bee20000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb6bf97e000)

Предполагается, что установлена ​​переменная QTDIR env.Если у вас есть QT, если установлен дистрибутив linux, qmake будет в пути.Если вы выполняли выборочную установку или компиляцию, вам нужно будет указать путь.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...