У меня есть установленное использование qtcreator спокойного установщика онлайн. Это поставлется который его собственная версия спокойной библиотеки. Спокойная библиотека также установлена в системных каталогах, но это является более старым. У меня есть проблемы с qtcreator (см. спокойные форумы). Подозрение этого могло бы состоять в том, потому что QT использует старые системные библиотеки, я выполнил спокойное использование
strace -e open qtcreator.sh
и действительно, это пользуется библиотеками в/usr/lib/x86_64-linux-gnu/qtcreator/
Для загрузки корректного libaries qrcreator.sh сценарий устанавливает LD_LIBRARY_PATH на
/home/<me>/Qt/Tools/QtCreator/lib:/home/<me>/Qt/Tools/QtCreator/lib/qtcreator
это корректно, но тем не менее, библиотеками от/usr/lib/x86_64-linux-gnu/qtcreator пользуются.
Как я могу сказать qtcreator пользоваться местными библиотеками несмотря на существование библиотек в масштабе всей системы?
К опции Nathan я добавил бы patchelf
, который позволяет изменяться RPATH
из исполняемого файла. Я лично предпочитаю исправлять RPATH
по определению LD_LIBRARY_PATH
и т.п., так как Ubuntu имеет проблему, определяющую их в profile
и также как будто не определяя это в profile
, это сохранение потребность сценария обертки.
Для определения исполняемого файла RPATH
, который является относительно каталога приложения (если Вы хотите, это не обязательно, чтобы сделать так), необходимо использовать $ORIGIN
заботящийся для выхода $
, который должен появляться буквально (так использование \$ORIGIN
, если Вы вызываете patchelf
от оболочки).напр. Если приложение принадлежит bin
, каталог и библиотеки принадлежат одноранговому узлу lib
каталог, Вы будете использовать $ORIGIN/../lib
для RPATH
.
можно также использовать абсолют RPATH
, если Вы предпочитаете.
См. PatchelfВ (nixos.org) .
Можно предварительно загрузить библиотеки с помощью переменной среды "LD_PRELOAD". Просто определите полный путь так файлы как это:
export LD_PRELOAD = "/path/to/so1.so /path/to/so2.so"