LINUX.ORG.RU

Каталог загрузки либов где теперь указывать.

 ,


0

1

Мне нужно запустить прогу скомпиленую под другие чем системные либы (и сорцов чтобы переделать нет а трахаться с симлинками лень ибо не единичный случай) Сами либы есть в отдельном каталоге, мешать их с системными тоже никак нельзя. Но у меня пустой LD_LIBRARY_PATH и просто export его с этим каталогом перед запуском не помогает. Где в генте стало модно указывать путь загрузки либов в последнее время и самое главное как мне добавить к нему . и просто произвольный каталог, какой я захочу?

1) LD_LIBRARY_PATH игнорируется для suid/sgid программ; также если в бинарнике установлен rpath, то у него приоритет выше, чем у LD_LIBRARY_PATH

2) Можно попробовать с LD_PRELOAD:

cd /path/with/libs; LD_PRELOAD=* /path/to/prog

tiandrey ★★★★★
()

Добавь свой каталог отдельной строкой в
/etc/ld.so.conf
Или впиши эту же строку в какой-нибудь файл в каталоге
/etc/ld.so.conf.d/
А потом ldconfig
Вот только если сторонние библиотеки перекрывают версиями библиотеки системные, то можешь огрести проблем.

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

Вот так как раз и не помогает. Такое впечатление что эта переменная вообще не роялит ни на что в современной генте.

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

Вот только если сторонние библиотеки перекрывают версиями библиотеки системные, то можешь огрести проблем.

Ну судя по всему у ТСа именно такой случай:

мешать их с системными тоже никак нельзя

Так что лучше в ld.so.conf не пихать, ибо если сторонние либы после системных окажутся, то будут бесполезны, а если перед системными, то что-то системное сломается.

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

Вне зависимости от дистрибутива загрузкой динамических библиотек ld.so управляет, что в генте, что в слаке, что в винде.

У тебя точно динамическая программа? В чём ошибка при запуске заключается?

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

В том что НЕ находятся либы которые лежат прямо в подкаталоге рядом, а запускающий скрипт прописывает этот подкаталог в LD_LIBRARY_PATH таким вот образом export LD_LIBRARY_PATH=«$LIB»:«$LD_LIBRARY_PATH» (LIB берется раньше как <каталог проги>/lib) Если я руками прописываю это перед стартом как первый коментатор написал (без относительных путей даже), то тоже самое. a echo $LD_LIBRARY_PATH вообще пустоту выдает. Есть вторая прога где либы лежат прямо в той же папке где и бинарник - тоже не находит. Про ld.so.conf вверху файла написано что его бесполезно редактировать и он перезаписывается env-update. Тогда как мне культурно прописать нужный каталог с либами, хоть бы даже и на время запуска? А точку неплохо бы и навсегда.

justin_case
() автор топика

LD_LIBRARY_PATH прекрасно работает в генте. Удваиваю просьбу Stil по поводу того как слинковано твоё приложение - покажи соответствующий выхлоп, который у тебя просили

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

Я не в курсе какой у ТС случай конкретно, возможно он что-то просто недоговаривает.
В любом случае ему будет лучше запустить своё приложение в chroot, там он может что угодно делать с библиотеками и как угодно их смешивать.

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

Про ld.so.conf вверху файла написано что его бесполезно редактировать и он перезаписывается env-update.

А про /etc/ld.so.conf.d/ ты не заметил, или специально умолчал?

imul ★★★★★
()

Программа chrpath может изменять rpath исполняемого файла.

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

Всё-таки подумай над запуском в chroot. Это будет правильнее в данном случае. Разумеется, на мой взгляд правильнее, но дело твоё.

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