Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.12.2024
Сообщений: 49

Какие зависимости линовка статически, а какие динамически, если динамически, то носить ли их вместе с пакетом или доверять это пакетному менеджеру?

26.12.2025, 12:54. Показов 1001. Ответов 9

Студворк — интернет-сервис помощи студентам
Всем привет, пишу ПО для Linux и я хочу понять, какие зависимости линковать статически, а какие динамически, а также, если линковать динамически, то поставлять .so файлы вместе с ПО в своей директории /lib или же доверять скачивание в систему пакетным менеджерам?
Как я понял динамические библиотеки в основном лучше, так как можно обновлять их не перекомпилируя свое ПО (и это огромный плюс).
Если доверять скачивание в систему пакетному менеджеру, то возникает проблема с тем, что на разных дистрибутивах и версиях linux могут быть разные версии используемых библиотек, тогда мне придется использовать наиболее древние версии этих библиотек?
В общем вопросы можно сформулировать так:
1. Линковать либы всегда динамически?
2. Если динамически, то как бороться с отсутствием нужных для работы ПО зависимостей на разных дистрибутивах и их версиях?
3. Норм вместе с ПО таскать зависимости .so?
Спасибо за ответ!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.12.2025, 12:54
Ответы с готовыми решениями:

[Решено] Ошибка: "Undefined symbol _main in module c0.ASM" при компиляции в пакетном режиме
Доброго времени суток всем! При компиляции в пакетном режиме выходила следующая ошибка:...

Пакетное переименование файлов
Задание: Создать папку в ней 10 файлов. Программа от пользователя получает маску, все файлы...

Пакетное переименование файлов
Добрый день, можно с помощью с++ написать прогу которая будет переименовывать файлы указанные в...

9
 Аватар для Pphantom
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
26.12.2025, 14:09
Цитата Сообщение от Arqlem Посмотреть сообщение
и я хочу понять, какие зависимости линковать статически, а какие динамически
Если есть выбор - динамически.
Цитата Сообщение от Arqlem Посмотреть сообщение
поставлять .so файлы вместе с ПО в своей директории /lib или же доверять скачивание в систему пакетным менеджерам?
Второе.
Цитата Сообщение от Arqlem Посмотреть сообщение
то возникает проблема с тем, что на разных дистрибутивах и версиях linux могут быть разные версии используемых библиотек, тогда мне придется использовать наиболее древние версии этих библиотек?
Не обязательно.

Во-первых, пользователи Linux обычно умеют обновлять ПО, так что случай с древними библиотеками - это скорее исключение, чем правило.

Во-вторых, ПО для Linux, если уж оно распространяется не в исходниках, обычно либо собирается под конкретный дистрибутив (несколько распространенных дистрибутивов), если оно популярно, либо делается под конкретный заказ (где используемый дистрибутив и его версия заранее известны).
1
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
26.12.2025, 14:25
Arqlem, бороться с отсутствующими зависимостями можно и с помощью Flatpack/Snap/AppImage
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
26.12.2025, 17:55
Цитата Сообщение от Arqlem Посмотреть сообщение
Линковать либы всегда динамически?
ну раз пишешь для линукса, то там же ведь по пингвиновской философии нужно предпочесть динамическую линковку.

правда пингвины поняли, что порой нужно распранять кишки вместе с прогой в целях стабильности, поэтому придумали
Цитата Сообщение от Usaga Посмотреть сообщение
Flatpack/Snap/AppImage
0
 Аватар для Pphantom
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
26.12.2025, 18:09
Цитата Сообщение от Usaga Посмотреть сообщение
бороться с отсутствующими зависимостями можно и с помощью Flatpack/Snap/AppImage
Можно, но в общем-то это крайний случай, когда ничего более разумного сделать не получается. Ибо ресурсы жрет в безумных количествах, да и просто противоестественно для *nix.
0
Эксперт .NET
 Аватар для Usaga
14314 / 9399 / 1355
Регистрация: 21.01.2016
Сообщений: 35,439
27.12.2025, 06:13
Цитата Сообщение от Pphantom Посмотреть сообщение
Ибо ресурсы жрет в безумных количествах
Разве? Можешь какую-то ссылку кинуть на некое исследование. Я без домоганий, правда интересно.

Цитата Сообщение от Pphantom Посмотреть сообщение
а и просто противоестественно для *nix.
А это плевать вообще. Либо ОС полезна, либо она следует неким принципам.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
27.12.2025, 09:05
Цитата Сообщение от Usaga Посмотреть сообщение
Разве? Можешь какую-то ссылку кинуть на некое исследование.
Ссылок на исследования нет, но могу привести реальный пример того, что он в какой-то мере прав.

Например, если в магазе Fedora Linux перейти на страничку Gimp, то можно увидеть, что размер FLATPAK из Fedora Linux равен 584 МБ, размер FLATPAK из Flathub равен 500 МБ, а вот размер системного RPM пакета с динамической линковкой всего 80 МБ. Разница значительная. На винде установщик GIMP весит всего 296 МБ, хотя там тоже со всеми зависимостями.
То есть, получается, что FLATPAK довольно-таки весят много.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,575
27.12.2025, 10:23
Цитата Сообщение от Royal_X Посмотреть сообщение
Например, если в магазе Fedora Linux перейти на страничку Gimp, то можно увидеть, что размер FLATPAK из Fedora Linux равен 584 МБ, размер FLATPAK из Flathub равен 500 МБ, а вот размер системного RPM пакета с динамической линковкой всего 80 МБ. Разница значительная. На винде установщик GIMP весит всего 296 МБ, хотя там тоже со всеми зависимостями.
То есть, получается, что FLATPAK довольно-таки весят много.
Количество и размеры зависимостей могут сильно отличаться в зависимости от ОС, платформы и т.д. Поэтому сравнивать размер некорректно.
0
 Аватар для Pphantom
2326 / 1569 / 722
Регистрация: 17.03.2022
Сообщений: 5,070
27.12.2025, 10:24
Цитата Сообщение от Usaga Посмотреть сообщение
Разве? Можешь какую-то ссылку кинуть на некое исследование. Я без домоганий, правда интересно.
А что тут исследовать? Очевидно же, что в такой ситуации софт тащит с собой все библиотеки и разделяемые ресурсы, которые ему нужны, соответственно, в итоговой системе они будут присутствовать в n копиях вместо одной.

Ну и, да, любое сравнение размеров пакетов, вроде приведенного Royal_X, показывает то же самое. Из собственного недавнего опыта - понадобился RStudio, которому неудачно что-то отломали в сборке под OpenSUSE Thumleweed. Решать проблему надо было быстро, поэтому воспользовался snap... разница в пять раз, 200М в первом случае и 1G во втором.
Цитата Сообщение от Usaga Посмотреть сообщение
А это плевать вообще. Либо ОС полезна, либо она следует неким принципам.
Скажем так: я никого не призываю из религиозных соображений не пользоваться какой-то возможностью, если нужен результат, а более удачных вариантов нет. Но намеренно выбирать плохое решение там, где есть хорошее, тоже в общем-то незачем.

Мы же сейчас обсуждаем вопрос о том, как сделать хорошо, а не как получится.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6236 / 2946 / 1047
Регистрация: 01.06.2021
Сообщений: 10,974
27.12.2025, 11:27
Программы на винде обычно поставляются со всеми библиотеками или используют статическую линковку. Если они и ссылаются к каким-то dll, то обычно только к системным, относящимся к винде, включая Visual C++ Redist, DX и прочее.
Исторически, винда любит статическую линковку. Если же используется динамическая линковка, то, как уже выше написал, все dll обычно поставляются вместе с программой, даже если они дублируются. На винде принято, что каждое приложение имеет собственную папку, где он лежит со всеми зависимостями.
И этот подход я считаю, что более правильный. Причина популярности такого подхода на винде кроется в "DLL hell" - явление, которое есть и на других платформах, но там оно известно как "ад зависимостей".
Пингвиновская идея, что если приложения будут использовать одни и те же зависимости, хороша в теории, но на практике постоянно приводит ко всяким конфликтам, когда одно приложение хочет одну версию той или иной зависимости, другая - другую, и обе версии установить нельзя из-за конфликта. Конечно, во многих случаях эти конфликты можно решить, но есть одно НО. Многое время линукс использовали только гики, задроты, хакеры и прочие звери, для которых решить этот конфликт было минутным делом. Но постепенно линукс стали использовать и прочие касты совершенно обычных юзверей, которые отказывались от винды и яблока по политическим причинам, чисто из-за взглядов. Для этих людей нужно было облегчить установку пакетов на линуксе. Во-первых, кроме пакетных менеджеров, нужно было создать менеджеры приложений с граф. интерфейсом. Во-вторых, установка должна была быть по одному клику и без всяких неожиданных конфликтов из-за зависимостей. И тут пришла идея создать всякие изолированные пакеты.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2025, 11:27
Помогаю со студенческими работами здесь

Пакетный коммутатор
Разработать программу, моделирующую работу пакетного коммутатора. Кто-то может помочь? Нужно для...

Написание пакетной утилиты ДОС средствами языка высокого уровня
помогите с лабораторной пожалуйста. Тема: Написание пакетной утилиты ДОС средствами языка...

Однострочный пакетный редактор на си
Алгоритм «Однострочный пакетный редактор» 1. Прочитать (ввести) редактируемую строку. ...

""D:\"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом
Только начал изучать С++, и уже в самом начале напоролся на ошибку. Перерыл весь гугл, ответа не...

bat не является внутренней или внешней командой, исполняемой программой или пакетным файлом
Делаю программу, в которой мне нужно запустить bat-ник. Раньше всё отлично запускалось, а теперь не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 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 существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru