Здравствуйте!
Возможно ли в программе на Qt подключить библиотеку не из системного каталога, а из своего?
Программа находится в каталоге /home/user/prog, библиотека liblib.so со своим исходным кодом в /home/user/prog/lib,
в pro-файле её каталог и она указаны через опции -L/home/user/prog/lib -llib,
в /home/use/prog/lib я ввёл команду
/sbin/ldconfig -v -n -r /home/user/prog/lib -l liblib.so
она создала ссылку, но при запуске программа библиотеку не находит.
В кэш библиотека, конечно, не заносится, но ведь в "man ldconfig" сказано, что она может запускаться от пользователя?
М.б., я указал не тот каталог с опцией "-r"?
Вообще как достичь желаемого?
Пользователь добавил сообщение 09 Февраля 2018, 15:11:13:
Я попробовал сделать правильно:
в каталоге /home/user/prog/lib создал каталоги etc и lib, в lib поместил liblib.so,
в etc создал файл ld.so.conf из одной строки - /lib и в /home/user/prog/lib вызываю ldconfig командой:
/sbin/ldconfig -v -r `pwd` -n /lib
хотя "-n /lib" теперь должна быть лишней, опять же в /home/user/prog/lib/lib ссылки создаются, но ld.so.cache нет.
Правда, я видел в Интернете утверждение, что локальный cache подключить не удастся, но всё равно - почему он не строится?
Мне в другом месте подсказали опцию линковщика "-rpath", но всё равно сначала надо создать cache.
Пользователь добавил сообщение 09 Февраля 2018, 15:39:16:
cache построился, когда я убрал опцию "-n /lib". ldconfig пожаловалась, что нет других предопределённых каталогов,
но etc/ld.so.cache построила.
Пользователь добавил сообщение 09 Февраля 2018, 16:57:50:
У qmake есть опция "-cache <cache-file>". Я включил в pro-файл свою библиотеку и путь к ней через "-l" и "-L"
и вызвал qmake так:
qmake -makefile -cache lib/etc/ld.so.cache prog.pro
Makefile создался содержащий этот cache в строке
Makefile:
но всё равно ld эту локальную библиотеку не находит, а почему?
QMAKE_LFLAGS ещё не наращивал.
Пользователь добавил сообщение 09 Февраля 2018, 18:55:24:
Я спросил и тут же обнаружил, почему, но исправить смогу только в понедельник.
Я запускал ldconfig с параметром "-r <dir>" и библиотеку поместил в dir/lib,
а ldconfig отсчитывает пути от корня - "/", соответсtвенно и в моём ld.so.cache путь был /lib,
т.е. ld искал эту библиотеку в настоящей /lib.
Я попробую воспроизвести в <dir> структуру домашнего каталога, т.е., например, home/user/lib,
тогда, надеюсь, и ld будет искать мою библиотеку в /home/user/lib.