LINUX.ORG.RU

[Ubuntu] Зависимости исполняемого файла

 


1

1

Я слышал, что есть такая чудо-утилита под названием ldd, которая показывает, от каких dll-ок зависит мой исполняемый файл. Прогнал своё поделие через неё, и она мне выдал кучу библиотек, многие из которых имеют ничего мне не говорящие имена (откуда они там взялись - одному Богу известно)

Как мне по этой информации узнать, от каких deb пакетов зависит моя программа? одним словом, чё мне писать в графе Depends при использование checkinstall?


Эмм. А какие инклуды то хоть?

no-steam ★★
()

Ты что, не знаешь какие библиотеки ты использовал? Наверняка в dpkg есть функци чтобы посмотреть какому пакету принадлежит файл.

elverion
()
Ответ на: комментарий от Shtsh
$ dpkg -S linux-gate.so.1
dpkg: файл *linux-gate.so.1* не найден.

И что с этим делать?

$ dpkg -S libcrypto.so.0.9.8
libssl0.9.8: /lib/libcrypto.so.0.9.8
libssl0.9.8: /usr/lib/libcrypto.so.0.9.8

он мне предлагает libssl0.9.8, но я не хочу привязываться к конкретной версии ssl

Мне нужен универсальный метод быстро получить зависимости, типа:

$ makemehappy executable 
depends: libevent libssl libawesome ...

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

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

>а не сидеть часами и выяснять, к какому пакету относится тот или иной модуль, и не дрожать от мысли о том, что программа не запустится из-за того, что на компе клиента нет какой-то маленькой неприметной библиотечки

Слинкуй статически.

reader
()

Ubuntu ... dll-ок

тонко
man apt-file

fluorite ★★★★★
()

ТС, ты тот еще тормоз, к примеру, показывает мой хеллоуворд зависимость libc.so.6, в зависимости значит нужно пихать glibc, как то так.

babusha
()
Ответ на: комментарий от zenden

> а не сидеть часами и выяснять, к какому пакету относится тот или иной модуль

это не линукс-вэй =) Здесь нужно вначале сделать тучу бесполезных времязатратных телодвижений, т.е. заняться сексом

но я не хочу привязываться к конкретной версии ssl


посмотри, какие симлинки есть на libcrypto.so.0.9.8, мб просветлит..

хотя в случае libssl, возможно, есть смысл привязываться к конкретной версии. А то при ее обновлениях универсальные проги мрут как мухи)

makemehappy executable


пока мантейнеры пакетов в кровавых битвах еще не до конца выяснили, чей пакет главнее, и что куда класть, не будет тебе такой утилиты )


резюме: предлагаю попросить в этом деле помощи у Бога лично

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

> Мне нужен универсальный метод быстро получить зависимости, типа:

Просто феерическая наглость.

Даю хинт. Этот универсальный метод называется «нанять человека, который разбирается в устройстве юникс и решит эту задачу за тебя».

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

Ты не знаешь, какие библиотеки использует код, который ты сам писал? Похвально, весьма похвально.

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

> Просто феерическая наглость.

Ты не знаешь, какие библиотеки использует код, который ты сам писал?


жир залил весь монитор! как ты научился писать столь калорийные посты?

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

это пока пишешь пишешь хэллоуворлды из трех строк)) код - клей для тучи библиотек. Часть линкованая, часть по принципу MIT тупо чекаутится с гитхаба и вваливается в файлы проекта. Что нужно для жизни всей этой свалке - хороший сложный вопрос)

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

>а не сидеть часами и выяснять, к какому пакету относится тот или иной модуль

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

uzbl
()

я использовал всего 4 библиотеки (libpcre,openssl,libcurl,zlib) для них я методом научного тыка побобрал пакеты(libpcre3,openssl,libcurl3,zlib1g), но зависимостей гораздо больше

	linux-gate.so.1 =>  (0x005d9000)
	libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00547000)
	libssl.so.0.9.8 => /lib/libssl.so.0.9.8 (0x00f43000)
	libpcre.so.3 => /lib/libpcre.so.3 (0x00cc5000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00a2a000)
	libm.so.6 => /lib/libm.so.6 (0x00e52000)
	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00110000)
	libc.so.6 => /lib/libc.so.6 (0x0012c000)
	libcrypto.so.0.9.8 => /lib/libcrypto.so.0.9.8 (0x00319000)
	libpthread.so.0 => /lib/libpthread.so.0 (0x0099e000)
	libidn.so.11 => /usr/lib/libidn.so.11 (0x0028a000)
	liblber-2.4.so.2 => /usr/lib/liblber-2.4.so.2 (0x00b75000)
	libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2 (0x00839000)
	librt.so.1 => /lib/librt.so.1 (0x004d3000)
	libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00fc4000)
	libz.so.1 => /lib/libz.so.1 (0x0066c000)
	libdl.so.2 => /lib/libdl.so.2 (0x00bd4000)
	/lib/ld-linux.so.2 (0x002fb000)
	libresolv.so.2 => /lib/libresolv.so.2 (0x00e8d000)
	libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00b95000)
	libgnutls.so.26 => /usr/lib/libgnutls.so.26 (0x00681000)
	libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x0071c000)
	libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00d62000)
	libcom_err.so.2 => /lib/libcom_err.so.2 (0x005b4000)
	libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00827000)
	libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00bec000)
	libtasn1.so.3 => /usr/lib/libtasn1.so.3 (0x00e37000)
	libgcrypt.so.11 => /lib/libgcrypt.so.11 (0x005da000)
	libgpg-error.so.0 => /lib/libgpg-error.so.0 (0x002bc000)

в этот список почемуто попала libgnutls.so.26 хотя я использовал openssl. насколько я знаю libgnutsl это гнутый аналог openssl для встраеваемых систем.

вот я и не могу понять с какой стороны разгребать этот список

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

> Что нужно для жизни всей этой свалке - хороший сложный вопрос)

./configure используется? Если да, то какие проблемы?

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

>в этот список почемуто попала libgnutls.so.26

Какая-то из прямых зависимостей слинкован с ней (список обрабатывается рекурсивно). Чтобы посмотреть только прямые зависимости бинаря:
objdump -x <бинарник> |grep -w NEEDED

uzbl
()
Ответ на: комментарий от Zenom

Такая информация легко восстанавливается по скриптам для сборки.

это если они есть

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

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

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

>он мне предлагает libssl0.9.8, но я не хочу привязываться к конкретной версии ssl

Он тебе дело говорит, кстате. OpenSSL славится тем, что нередко ломает ABI даже между минорными версиями. Так что твоя программа может с новым/старым просто сегфолтится.

Sectoid ★★★★★
()

> при использование checkinstall

чё мне писать в графе Depends

Не используй checkinstall, напиши минимальные debian/{control,rules,...}, и при сборке debhelper проставит все зависимости за тебя. Руками Depends заполнять не надо, только Build-Depends.

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