LINUX.ORG.RU

Забабахать rpath в executable

 , , ,


0

2

Насколько по-пацански вот так компилять бинарники:

-Wl,-R,'$ORIGIN'
чтобы избежать скрипта вида
LD_LIBRARY_PATH=. ./myapp

Ну я к тому что почему во всяких qt deployment guide такого способа не приводят, а предлагают LD_LIBRARY_PATH использовать?

★★★★★

Последнее исправление: UVV (всего исправлений: 2)

Пацаны делают это отключаемым при сборке. Но у тебя же ректальный бинарник?

anonymous
()

А почему бы и нет? Я вот в criu так тесты собираю.

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

Пацаны делают это отключаемым при сборке.

Чо прям специально? Можно пример.

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

Не используй. rpath он, тем не менее, прописывает сам.

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

дадада. и исчо --enable-new-dtags.
но вообще-то юзеры должны сами выбирать что откуда тянуть. у каждого линюксоида свой огород и прибивать что-то гвоздями - дурной тон.

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

А если делать make install не со стандартным префиксом? Ну, например, при установке в какой-нибудь /opt без rpath ничего не заработает.

В продакшене, с которым я работал, так и делали.

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

Если делаете странное, разбирайтесь с этим сами как хотите. Хотя я бы в этом случае прописал /opt/lib в ldconfig_paths.

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

Не такое уж странное. В генте, например, всякие бинарные пакеты ставятся в /opt, и для пользователя это происходит абсолютно прозрачно. Более того, там даже нет /opt/lib, там у каждого приложения своя директория с либами.

Я всё это к тому, что если задумано, что у пользователя _по дефолту_ бинарники должны оказаться не по дефолтным путям, то надо озаботиться ещё и тем, чтобы пользователь мог их запустить без ручного вмешательства. В других случаях, конечно, лучше воспользоваться другими способами.

Ещё один пример, подходящий под описанную ситуацию — NixOS, там вообще всё на этом подходе завязано.

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

Не надо мне про это рассказывать, мне решительно наплевать как вы развлекаетесь в своих школоподелках и к теме это никакого отношения не имеет.

К теме имеет отношение то, что cmake сам добавляет rpath, чтобы проект включающий shared либы запускался из сборочной директории без лишних телодвижений и то что он умеет эти rpath убирать при установке, чтобы системный бинарник, не дай бог, не подхватил библиотеку из сборочной директории. Всё.

Хотя, разумеется, cmake умеет прописывать какой угодно rpath и не удалять его при установке, но вам это не поможет, потому что cmake, к сожалению, не единственная сборочная система. Так что трахайтесь в своих гамаках как хотите.

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

ТС не указывал, что именно ему надо: запускать проект только в каталоге сборки или же еще и после установки. Я потому и рассказываю про второй вариант, а про make install (в особенности про то, что ни о чём речь не идёт, кроме запуска в каталоге сборки) здесь говоришь только ты.

Главное, ты не кипятись. А я, пожалуй, свалю из этого треда, а то ты какой-то нервный.

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