Как подать заявку пользоваться локальной общей библиотекой вместо системы один

У меня есть установленное использование 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 пользоваться местными библиотеками несмотря на существование библиотек в масштабе всей системы?

3
задан 5 May 2015 в 19:02

2 ответа

К опции Nathan я добавил бы patchelf, который позволяет изменяться RPATH из исполняемого файла. Я лично предпочитаю исправлять RPATH по определению LD_LIBRARY_PATH и т.п., так как Ubuntu имеет проблему, определяющую их в profile и также как будто не определяя это в profile, это сохранение потребность сценария обертки.

Для определения исполняемого файла RPATH, который является относительно каталога приложения (если Вы хотите, это не обязательно, чтобы сделать так), необходимо использовать $ORIGIN заботящийся для выхода $ , который должен появляться буквально (так использование \$ORIGIN, если Вы вызываете patchelf от оболочки).напр. Если приложение принадлежит bin, каталог и библиотеки принадлежат одноранговому узлу lib каталог, Вы будете использовать $ORIGIN/../lib для RPATH.

можно также использовать абсолют RPATH, если Вы предпочитаете.

См. PatchelfВ (nixos.org) .

0
ответ дан 1 December 2019 в 23:10

Можно предварительно загрузить библиотеки с помощью переменной среды "LD_PRELOAD". Просто определите полный путь так файлы как это:

export LD_PRELOAD = "/path/to/so1.so /path/to/so2.so"
0
ответ дан 1 December 2019 в 23:10

Другие вопросы по тегам:

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