LINUX.ORG.RU

Подсунуть проге другую версию либы


0

2

Добрый вечер!

Есть кросплатформенная прога, написанная на Qt. Стоит задача ее распространения. Если в винде положить рядом с exe-шником нужные библиотеки dll от qt (например QtCore4.dll и другие), то тогда прога запускается вне зависимости от того, какая версия qt установлена в системе, т.е. прога использует в первую очередь те длл, которые лежат в той же папке.

А вот с linux'ом все сложнее. В системе установлена версия 4.2.2, а проге нужно минимум 4.6.2. Пробовал в ту же папку с бинарником положить файлик libQtCore4.4.6.2.so и в той же папке сделать симлинк на него, - не получается, прога все равно системную либу берет.

Вариант с заменой системной библиотеки qt на мою более новую версию не подходит потому что сервак не мой и боюсь что-нибудь сломается при этом.

Как мне сделать в linux'e так, чтобы прога использовала именно скопированные с ней же библиотеки qt? Спасибо.


export LD_LIBRARY_PATH

sdio ★★★★★
()

Слинковать? Я всегда так обходил проблему версий.

TGZ ★★★★
()
Ответ на: комментарий от UserUnknown

LD_LIBRARY_PATH=/home/1/1 && export LD_LIBRARY_PATH я так понял не играет роли, потому что библиотека qt уже в системе есть, просто она старая. И видимо прога в первую очередь из папки /usr/lib берет все же, хоть и указали куда глядеть..

gcc -static насколько я понял не подходит потому что юзается odbc, который вроде не работает со статической линковкой

Madaro
() автор топика
Ответ на: комментарий от Madaro

Если программа не имеет suid-бит, то в первую очередь она смотрит в содержимое LD_LIBRARY_PATH

export LD_LIBRARY_PATH=«/path/to/lib»; ./prog

annoynimous ★★★★★
()
Ответ на: комментарий от annoynimous

Чтобы подсунуть отдельно взятую библиотеку (конкретный файл или несколько файлов), можно также использовать LD_PRELOAD.

Nastishka ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.