LINUX.ORG.RU
ФорумTalks

[бинарнодистропроблемы] Зависимости


0

1

Проблема, существующая (почти) во всех бинарных дистрибутивах та, что при установке приложений тянется много зависимостей, т.к. при компилировании мантайнеры выбрали поддержку каких-то библиотек, и их требуется установить тоже. Как, например, в дебиане mplayer скомпилирован с directfb и приходится этот libdirectfb тоже ставить, хотя он совсем не нужен.

Разработчики приложений об этой роблеме не могут не знать, т.к. большинство дистрибутивов - бинарные. Правда, дистрибутивы предлагают возможность перекомпилировать, но это неудобно, особенно на слабых системах.

Но ведь в libc есть возможность динамически подгружать shared library с помощью dlopen из библиотеки libdl, что позволяет разом избавиться от всех описанных выше проблем: при компилировании указываются только те библиотеки, которые всегда нужны и libdl, а опциональные подгружаются по мере необходимости и возможности.

я тут попробовал эту libdl, так никаких трудностей программисту она не создает. dlopen, dlsym, dlclose. Так почему она так мало используется?

★★★★★

я тут попробовал эту libdl, так никаких трудностей программисту она не создает. dlopen, dlsym, dlclose. Так почему она так мало используется?

Потому что от программиста требуется лишняя возня со всеми этими dlopen, dlsym, dlclose, обработкой и индикацией ошибок.

Как, например, в дебиане mplayer скомпилирован с directfb и приходится этот libdirectfb тоже ставить, хотя он совсем не нужен.

Ну поставил ты эту libdirectfb, и что, убыло от тебя? Компьютер взорвался, тики нервные начались?

Manhunt ★★★★★
()

Возможно юзеры не будут знать о поддержке чего-то

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

Ну поставил ты эту libdirectfb, и что, убыло от тебя? Компьютер взорвался, тики нервные начались?

А если тарификация по трафику?

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

Если с libdirectfb еще ничего, то, например, установка gnome требует поставить кучу прог для bluetooth. А это уже не так и мало. к тому же интернет медленный, и тянуть дополнительный трафик мне совсем не улыбается.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

Потому что от программиста требуется лишняя возня со всеми этими dlopen, dlsym, dlclose, обработкой и индикацией ошибок.

А компьютер на что? Всё это можно автоматизировать.

geekless ★★
()

Но часто так и делают.

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

Это позволит выкинуть опциональные возможности из зависимостей

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

Потому что от программиста требуется лишняя возня со всеми этими dlopen, dlsym, dlclose, обработкой и индикацией ошибок.

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от buddhist

А потом попробуйте собрать это под виндой.

В винде возможность динамической загрузки библиотек была еще в win95

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

к тому же интернет медленный, и тянуть дополнительный трафик мне совсем не улыбается.

Видимо, такое объяснение не достаточно мотивирует разработчиков на ненужную возню.

Manhunt ★★★★★
()
Ответ на: комментарий от cvs-255

Можно еще плагины использовать для этого. Скажем, есть десктопная панель, на ней есть виджет регулятора громкости, который зависит от библиотек альсы. Виджет живёт в отдельном *.so. Понятно, что на этапе сборки панели нам нужны соответствующие заголовочные файлы. Но на этапе выполнения, альса нам не нужна. Если в системе нет библиотек альсы, то при попытке добавить виджет на панель, он просто не загрузится. Поэтому альсу можно у такой программы ставить в мягкие зависимости, а не в жесткие.

Так что dlopen действиетльно решает много подобных проблем.

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

Но зачем? Всё это можно просто не делать.

Но зачем? Ведь можно просто ничего не делать и пойти выпить.

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

Но зачем? Ведь можно просто ничего не делать и пойти выпить.

Все баги уже пофикшены, весь функционал написан?

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

зачем

Модульность рулит же.

И еще, не забывай, что лишние библиотеки — это не только место на диске, но и дополнительное время на линковке при exec(). Копейки, конечно, но сам факт...

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

Да этой возни на 5 минут там.

Так только кажется.

Ведь можно просто ничего не делать и пойти выпить.

Точно. Можно заняться более приоритетными целями. Кому выпить, кому побыдлокодить чего...

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

qt и boost

Совать Qt или Boost в легкую поделку? Нет, есть какой-то порт libdl под винду, но он пока не слишком в ходу.

buddhist ★★★★★
()
Ответ на: комментарий от cvs-255

Внезапно

> Так что dlopen действиетльно решает много подобных проблем.

Действительно внезапно. Твой мало-мало русская читай умей?

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

Например firefox:

 
$ ldd /usr/lib/xulrunner-8.0/xulrunner-bin
	linux-vdso.so.1 =>  (0x00007fff983ff000)
	libxpcom.so => not found
	libmozalloc.so => not found
	libxul.so => not found
	libplc4.so.0d => /usr/lib/x86_64-linux-gnu/libplc4.so.0d (0x00007f949c4f3000)
	libnspr4.so.0d => /usr/lib/x86_64-linux-gnu/libnspr4.so.0d (0x00007f949c2b4000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f949c097000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f949bd10000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f949c708000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f949bb0c000)
cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от geekless

Осталось только убедить разработчиков делать именно так

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

Половина ЛОРа не знает, что значит слово функционал...

Как скажешь, пусть будет «функциональность». Из контекста разве не понятно, что речь идет не о функциях высших порядков?

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

Все баги уже пофикшены, весь функционал написан?

Ну так разве возможность не тащить кучу ненужных библиотек - не является само по себе хорошей частью функционала?

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

Ну так разве возможность не тащить кучу ненужных библиотек - не является само по себе хорошей частью функционала?

С точки зрения разрабочика [этого приложения], видимо, нет.

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

Конечно, медленнее только на этапе загрузки, но всё же.

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

Копейки, конечно, но сам факт...

Вот именно, что копейки.

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

Это емнип медленнее.

С чего бы?

Делается же ровно то же самое, что и при инициализации при загрузке программы.

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

А с учетом того, что ненужные (в данный момент) можно вообще не загружать, так и быстрее выйдет

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Manhunt

Так только кажется.

Ну на час, если не очень спешить. По сравнению со временем разработки программы это очень мало.

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

Хотя для больших программ и действительно может занять некоторое время на поиск, какие функции из каких библиотек используются.

cvs-255 ★★★★★
() автор топика

Ты слишком глубоко думаешь. Life is meant to be simple ©

Для оченно толстых вещей есть equivs.

Deleted
()
Ответ на: комментарий от RussianNeuroMancer

А как там решена эта проблема?

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

Он даст на крупных штуках, которые на самом деле опциональны. А от libdirectfb ещё никто не умирал.

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

которые на самом деле опциональны.

если они опциональны при комиляции, еще не значит, что если мы просто выкинем соответствующие им файлы из системы, то не получим

lib такая-то: cannot open shared object file: No such file or directory

cvs-255 ★★★★★
() автор топика

Изучи такую штуку, как опциональные зависимости. Всё это давно есть. Ты велосипед изобрёл.

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

Ну и как ты предлагаешь сделать, например, directfb в mplayer в виде опцинальной зависимости, когда mplayer слинкован с libdirectfb.so?

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

Не знаю, спроси akonadi-server :3 Хотя тут, скорее, некоторые особенные товарищи, которые считают, что часикам надо обязательно это всё, а посему надо усё залить бетоном. Причём сами часики то работают и так, плазмоед же.

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