Има ли начин да добавите относителен път на библиотека към изпълним файл, за да избегнете настройката LD_LIBRARY_PATH

Създавам програма, която свързва някои споделени библиотеки. Те се съдържат в директория lib/ по отношение на моя проект.

Проблемът, който имам, е, че бих искал изпълнимият файл да знае да търси библиотеките в относителната директория ../lib. Възможно ли е това?

Всъщност не искам да променя ld_library_path или да премествам файловете в един от стандартните пътища, притежавани от root.

Мога да компилирам изпълнимия файл и да го стартирам, когато .so файловете са на един от стандартните пътища, показани със strace/ldd


person joeButler    schedule 30.09.2014    source източник
comment
не можете ли да стартирате програмата от скрипт, който временно променя пътищата за зареждане на библиотеката   -  person Cheers and hth. - Alf    schedule 01.10.2014
comment
Да, това би било опция, ако всичко друго се провали. Мога да създам обвивка, която прави това от Makefile. В крайна сметка бих искал да използвам Boost::Python, за да създам модул на python, който няма да работи с този метод. Просто търся опции, преди да се справя с нещата в /usr/lib   -  person joeButler    schedule 01.10.2014


Отговори (1)


Можете да използвате -rpath от линкера (използвайки ld като линкер).

От неговата страница с ръководство:

-rpath=dir

Добавете директория към пътя за търсене на библиотеката по време на изпълнение. Това се използва при свързване на изпълним файл на ELF със споделени обекти. Всички -rpath аргументи се обединяват и предават на линкера по време на изпълнение, който ги използва за намиране на споделени обекти по време на изпълнение. Опцията -rpath се използва и при локализиране на споделени обекти, които са необходими на споделени обекти, изрично включени във връзката; вижте описанието на опцията -rpath-link. Ако -rpath не се използва при свързване на изпълним файл на ELF, ще се използва съдържанието на променливата на средата LD_RUN_PATH, ако е дефинирана.

person Amadeus    schedule 30.09.2014
comment
По-полезна от rpath като цяло, колкото и полезна да е, е стойността $ORIGIN за rpath. Потърсете $ORIGIN на man7.org/linux/man-pages/ man8/ld.so.8.html за повече информация. - person Etan Reisner; 01.10.2014