|
0 / 0 / 0
Регистрация: 17.12.2024
Сообщений: 49
|
|
Какие зависимости линовка статически, а какие динамически, если динамически, то носить ли их вместе с пакетом или доверять это пакетному менеджеру?26.12.2025, 12:54. Показов 1001. Ответов 9
Всем привет, пишу ПО для Linux и я хочу понять, какие зависимости линковать статически, а какие динамически, а также, если линковать динамически, то поставлять .so файлы вместе с ПО в своей директории /lib или же доверять скачивание в систему пакетным менеджерам?
Как я понял динамические библиотеки в основном лучше, так как можно обновлять их не перекомпилируя свое ПО (и это огромный плюс). Если доверять скачивание в систему пакетному менеджеру, то возникает проблема с тем, что на разных дистрибутивах и версиях linux могут быть разные версии используемых библиотек, тогда мне придется использовать наиболее древние версии этих библиотек? В общем вопросы можно сформулировать так: 1. Линковать либы всегда динамически? 2. Если динамически, то как бороться с отсутствием нужных для работы ПО зависимостей на разных дистрибутивах и их версиях? 3. Норм вместе с ПО таскать зависимости .so? Спасибо за ответ!
0
|
|
| 26.12.2025, 12:54 | |
|
Ответы с готовыми решениями:
9
[Решено] Ошибка: "Undefined symbol _main in module c0.ASM" при компиляции в пакетном режиме Пакетное переименование файлов Пакетное переименование файлов |
|
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
|
||||
| 26.12.2025, 14:09 | ||||
|
Во-первых, пользователи Linux обычно умеют обновлять ПО, так что случай с древними библиотеками - это скорее исключение, чем правило. Во-вторых, ПО для Linux, если уж оно распространяется не в исходниках, обычно либо собирается под конкретный дистрибутив (несколько распространенных дистрибутивов), если оно популярно, либо делается под конкретный заказ (где используемый дистрибутив и его версия заранее известны).
1
|
||||
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|
| 26.12.2025, 14:25 | |
|
Arqlem, бороться с отсутствующими зависимостями можно и с помощью Flatpack/Snap/AppImage
0
|
|
|
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
|
|||
| 26.12.2025, 17:55 | |||
|
правда пингвины поняли, что порой нужно распранять кишки вместе с прогой в целях стабильности, поэтому придумали
0
|
|||
|
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
|
||
| 26.12.2025, 18:09 | ||
|
0
|
||
|
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
|
|||
| 27.12.2025, 06:13 | |||
|
0
|
|||
|
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
|
||
| 27.12.2025, 09:05 | ||
|
Например, если в магазе Fedora Linux перейти на страничку Gimp, то можно увидеть, что размер FLATPAK из Fedora Linux равен 584 МБ, размер FLATPAK из Flathub равен 500 МБ, а вот размер системного RPM пакета с динамической линковкой всего 80 МБ. Разница значительная. На винде установщик GIMP весит всего 296 МБ, хотя там тоже со всеми зависимостями. То есть, получается, что FLATPAK довольно-таки весят много.
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
|
||
| 27.12.2025, 10:23 | ||
|
0
|
||
|
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
|
|||
| 27.12.2025, 10:24 | |||
|
Ну и, да, любое сравнение размеров пакетов, вроде приведенного Royal_X, показывает то же самое. Из собственного недавнего опыта - понадобился RStudio, которому неудачно что-то отломали в сборке под OpenSUSE Thumleweed. Решать проблему надо было быстро, поэтому воспользовался snap... разница в пять раз, 200М в первом случае и 1G во втором. Мы же сейчас обсуждаем вопрос о том, как сделать хорошо, а не как получится.
0
|
|||
|
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
|
|
| 27.12.2025, 11:27 | |
|
Программы на винде обычно поставляются со всеми библиотеками или используют статическую линковку. Если они и ссылаются к каким-то dll, то обычно только к системным, относящимся к винде, включая Visual C++ Redist, DX и прочее.
Исторически, винда любит статическую линковку. Если же используется динамическая линковка, то, как уже выше написал, все dll обычно поставляются вместе с программой, даже если они дублируются. На винде принято, что каждое приложение имеет собственную папку, где он лежит со всеми зависимостями. И этот подход я считаю, что более правильный. Причина популярности такого подхода на винде кроется в "DLL hell" - явление, которое есть и на других платформах, но там оно известно как "ад зависимостей". Пингвиновская идея, что если приложения будут использовать одни и те же зависимости, хороша в теории, но на практике постоянно приводит ко всяким конфликтам, когда одно приложение хочет одну версию той или иной зависимости, другая - другую, и обе версии установить нельзя из-за конфликта. Конечно, во многих случаях эти конфликты можно решить, но есть одно НО. Многое время линукс использовали только гики, задроты, хакеры и прочие звери, для которых решить этот конфликт было минутным делом. Но постепенно линукс стали использовать и прочие касты совершенно обычных юзверей, которые отказывались от винды и яблока по политическим причинам, чисто из-за взглядов. Для этих людей нужно было облегчить установку пакетов на линуксе. Во-первых, кроме пакетных менеджеров, нужно было создать менеджеры приложений с граф. интерфейсом. Во-вторых, установка должна была быть по одному клику и без всяких неожиданных конфликтов из-за зависимостей. И тут пришла идея создать всякие изолированные пакеты.
0
|
|
| 27.12.2025, 11:27 | |
|
Помогаю со студенческими работами здесь
10
Пакетный коммутатор Написание пакетной утилиты ДОС средствами языка высокого уровня Однострочный пакетный редактор на си ""D:\"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом bat не является внутренней или внешней командой, исполняемой программой или пакетным файлом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|