LINUX.ORG.RU

найти все зависимые библиотеки и загрузить их в определённый каталог

 ,


0

1

День добрый! Понял что с помощью команды ldd program_name можно определить все зависимые от приложения библиотеки. Можно ли их какой-либо командой или скриптом загрузить в определённый каталог?

Ответ на: комментарий от Gnomesu

А в чём проблема? ldd указывает полный путь к библиотеке, и этот путь несложно скопировать куда угодно. Например, командой for i in $(ldd программа | awk '{print $3}'); do cp -va $i ~/mylib/; done.

зачем вообще засорять форум бессмысленными сообщениями?

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

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

Это не работает в множестве случаев.

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

Собираю универсальный пакет с помощью CDE

CDE (formerly known as CDEpack) automatically packages up the Code, Data, and Environment required to deploy and run your Linux programs on other machines without any installation or configuration. CDE is the easiest way to completely eliminate dependency hell.

Но он тащит за собой много мусора поэтому мне нужны лишь те библиотеки которые действительно нужны приложению а сам CDE использую для портативности. (запуска программы в любом месте и на любом дистрибутиве). Таким способом собрал простенькую игру Ri-li. Игра была проверена на slackware и linux mint, запустилась без проблем из домашнего каталога. Правда размер всего этого чуда вырос до безобразия, но это не столь важно. Проблема заключается только в копировании каждой библиотеки вручную, отнимает много времени.

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

Собираю универсальный пакет с помощью CDE

Кстати, если проблема только в либах, то можно ещё статически линковать (при наличии исходников и статических версий либ).

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

Если кого не затруднит проверьте пожалуйста работоспособность собранной мной игры Ri-li на своём дистрибутиве, буду очень признателен.

https://yadi.sk/d/JlQR6_rM3TqKdi Размер архива: 30 MB

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

for i in $(ldd программа | awk '{print $3}'); do cp -va $i ~/mylib/; done

Спасибо помогло, удалось скопировать библиотеки, но возникла проблема что большинство из того что скопировалось являются симлинками. Было бы здорово если бы вместе с симлинком команда копировала и библиотеку ссылающуюся на неё.

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

большинство из того что скопировалось являются симлинками. Было бы здорово если бы вместе с симлинком команда копировала и библиотеку ссылающуюся на неё.

Используй в команде cp опцию -L или -H. Подробнее см. man cp.

for i in $(ldd программа | awk '{print $3}'); do cp -vaL $i ~/mylib/; done

Тогда ссылки копироваться не будут, а вместо них будет копироваться то, на что они ссылаются (имена, правда, будут как у ссылок).

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

Спасибо большое! В итоге ничего толкового не получилось. Вначале в игре не было звука, с этим разобрался, библиотеки PulseAudio почему-то должны находится в /usr/bun/PulseAudio Звук появился, игра работает, но всё равно сыплет в терминале различными ошибками. Сборка с помощью CDE отпадает. Вопрос к знатокам, можно ли собрать snap пакет из установленного в системе приложения а точнее той же игры ri-li? Или snap пакеты делаются из собранных из исходников программ? Не нашёл внятной документации о snap, только это https://losst.ru/kak-sozdat-snap-paket-ubuntu-16-04 но там рассматривается по сути уже портативное приложение из которого собирать snap пакет не имеет смысла.

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

библиотеки PulseAudio почему-то должны находится в /usr/bun/PulseAudio

Наверно, не библиотеки, а сам pulseaudio? А библиотеки — в /usr/lib/pulseaudio.

игра работает, но всё равно сыплет в терминале различными ошибками.

Если работает, и только ошибки раздражают, то перенаправь их в какой-нибудь лог или вообще в /dev/null.

Вопрос к знатокам, можно ли собрать snap пакет из установленного в системе приложения а точнее той же игры ri-li? Или snap пакеты делаются из собранных из исходников программ? Не нашёл внятной документации о snap

Про snap ничего конкретного не скажу.

Но в общем и целом проблемы могут быть разные и, соответственно, решаться должны по-разному. В одних случаях может быть достаточно прописать новые переменные окружения в скрипте, указывающие пути к библиотекам, файлам настройки и другие параметры или запустить программу с нужными опциями. В других случаях программу надо пересобрать из исходников, указав при сборке новые дефолтные пути и другие опции компиляции. В третьих случаях нужно создать виртуальное окружение для программы с помощью chroot или какой-то другой системы виртуализации и настроить это окружение под программу. Последний способ самый универсальный, хотя в общем случае и тут могут быть проблемы.

Сами проблемы могут возникнуть из-за неправильных путей (см. fhs), неправильной версии библиотеки, наличия разных версий динамической библиотеки в одной системе, работающих в одном окружении (для решения этой проблемы можно использовать chroot) и др.

Об этих проблемах тебя предупреждали в этом треде анонимус и я.

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