|
|
Результаты опроса: Какая линковка лучше: статическая или динамическая? | |||
Статическая | 12 | 52.17% | |
Динамическая | 11 | 47.83% | |
Голосовавшие: 23. Вы ещё не голосовали в этом опросе |
|
Рейтинг 4.75/141: |
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
1 | |
Статическая линковка VS динамическая линковка26.03.2016, 19:44. Показов 26495. Ответов 75
Метки нет (Все метки)
Существует два типа линкования библиотек: статическое и динамическое.
При статической линковке все подключённые к проекту библиотеки .lib вшиваются в исполняемый файл, для большей автономности программы. При динамической линковке все подключённый к проекту библиотеки .dll носятся отдельно от исполняемого файла, вместе с ним, во имя концепции модульности. Плюсы статической линковки: 1. Удобно, всё в одном файле, ничего не потеряется. 2. Нет несовместимости версий отдельных компонентов. Минусы статической линковки: 1. Увеличенный размер файла. 2. Увеличение времени компиляции. Плюсы динамической линковки: 1. Небольшой размер файла. 2. Более быстрая компиляция. Минусы динамической линковки: 1. Проблема с отсутствием необходимых библиотек. 2. Проблема с совместимостью версий библиотек. 3. Много файлов библиотек, связанных с программой, которые обычно нужно переносить вместе с самой программой, что утяжеляет распространение программы и делает его неудобным. А какую позицию выберете Вы?
0
|
26.03.2016, 19:44 | |
Ответы с готовыми решениями:
75
Динамическая/статическая типизация, интерпретация/компиляция и функциональные языки - плюсы и минусы Статическая и динамическая линковка - в чем преимущество каждой? Статическая линковка Qt Qt 5.1.1 статическая линковка |
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
26.03.2016, 19:53 | 2 |
Эммм... То есть, есть статическая либа, но нет динамической?
Поработай с Linux. Пойми что такое версия и ее формат.
Таких проблем нет. Опять же поработай с Linux. Много файлов библиотек позволяют экономить и место и память, потому что каждая программа не загружает свою копию библиотеки, а использует существующую. И файлы библиотек поставятся сами по зависимостям. А на винде пользователь так вообще не видит, какие там файлы с собой таскает программа. Программа, кроме dll с собой еще сотни разных файлов может таскать. В чем неудобство не понятно.
И невозможность накатить фикс отдельно с новой версией библиотеки.
Никакую. Зависит все от приложения, таргет ОС, самой библиотеки и ее лицензии.
0
|
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
26.03.2016, 20:14 | 4 |
Тем, чем майский жук отличается от пылесоса. Вопрос никак не связан с тем, что было написано. Linux - очень наглядный пример того, как работает версионность библиотек, их обновления, и backward compatibility. Какое расширение стоит у библиотеки, не имеет значения, хоть zyu вместо so. Если бы человек работал с Linux, у него бы никогда не возникло таких вопросов, как в теме.
0
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
26.03.2016, 20:57 [ТС] | 5 |
Не, ну самые базовые компоненты ОС пусть будут и динамическими, они везде поставляются в комплекте с ОС, но программе то это зачем надо? Экономия памяти? Ничего плохого не случится если программа будет занимать больше, намного больше, даже если у пользователя мало памяти, даже если много программ, они все работают, одновременно, находятся в памяти, всем хватит, 21 век, всё нормально, не паникуем.
Линукс не люблю из-за того, что большинство использует Windows, зачем мне проблемы совместимости, когда их у меня нет, как и у многих. Но главное то, что из-за различий в версии библиотек получается неработоспособность программ. Этого можно было избежать, если бы разработчики чётко отслеживали свои версии и их совместимость, но этого не произошло то ли из-за занятости, то ли из-за лени, поэтому оказалось лучше использовать статическую линковку, чтобы избежать т. н. DLL-hell. Добавлено через 8 минут Некоторые цитаты: Добавлено через 12 минут И в конце концов, сам машинный код программы никогда и не занимал много места, в отличие от данных. Я выбираю статическую линковку, да и не только я...
0
|
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
26.03.2016, 21:02 | 6 |
Затем, чтобы не таскать с собой библиотеки и иметь правки в билиотеках отдельно от программы, как во всех нормальных ос.
Да это еще по теме заметно, что ты с ним не работаешь.
Хах. Версионность уже давно и успешно эту проблему решает в линухе. И динамика в нем процветает. И все в порядке.
Добавлено через 2 минуты Какая разница, сколько он занимает? Зачем мне статическая линковка, если я могу слинковаться динамически? Это тупо безопаснее. Когда все виндо недоприложения будут юзать бажную openssl, в линухе она будет общей и обновится отдельно от всех программ. После обновления все программы будут использовать новую версию. Это правильный подход примененный в Linux. А у винды архитектура кривая, поэтому там ваш dll hell Добавлено через 56 секунд Да выбирай ты че хочешь. Только кому это интересно, что там школьники виндовозные выбирают?
0
|
MLPMan
|
26.03.2016, 22:32
#8
|
Не по теме: Velesthau, как бы там красиво ни было бы сделано в Линуксе, но у Винды всё ещё существенный кусок рынка, и с этим приходится считаться.
0
|
Ушел с форума
|
|
26.03.2016, 22:53 | 9 |
Для небольших приложений типа всяких консольных утилит, вьюеров и т.п. -
статическая компоновка. Для чего-то посерьезнее буду использовать динамику. Но при этом dll не буду кидать в \Windows\system32, а положу локально, в папку с приложением. Да-да, очень легко вот так "с ноги" завалить всю вину на абстрактных криворуких прогеров. А теперь представь, что у тебя софт с многолетней историей, имеющий кучу версий, форков и т.д. Как ты будешь отслеживать совместимость версий? Составишь матрицу версий и заставишь тестировщиков гонять их 365 дней в году 7 дней в неделю, скрещивая одну версию с другой? Ну и что ж здесь правильного? Приложение X разрабатывалось и тестировалось под версию OpenSSL 1.0.3, условно говоря. Обновили OpenSSL до 1.0.4, теперь приложение при запуске падает (т.к. был скрытый баг, завязанный на особенности реализации 1.0.3, при которых он маскировался). Все, сервер упал, у клиентов не проходят запросы, жалобы в техподдержку и т.п. При чем здесь Windows или linux - мне непонятно. Я с linux не знаком, сразу говорю, поэтому могу где-то заблуждаться или каких-то вещей не знать, так что если кто-нибудь объяснит, как в linux решена проблема dll hell - буду признателен. не имеют никаких проблем с этим. А общие компоненты типа vcredist или gdiplus имеют достаточно опций, чтобы уберечь их от hell-а, даже не особо задумываясь об этом.
0
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
27.03.2016, 00:14 [ТС] | 10 |
Velesthau:
0
|
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
|
|
27.03.2016, 10:35 | 11 |
Или баг.
В нормальных ОС нормальный API, а не то убожество, что в линуксах. Ага… http://harmful.cat-v.org/software/dynamic-linking/ http://sta.li Добавлено через 49 минут http://morpheus.2f30.org
0
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
27.03.2016, 14:50 [ТС] | 12 |
Ну вот я вчера решил посидеть и представить, что было бы если бы я например использовал dll вместо вшивания в один единственный файл:
1. Надо было бы всё упаковывать в архив вместе с моей программой, даже если программа и не имеет данных. 2. Пришлось бы всё равно распространять весь архив вместо обновлённых компонентов, потому что у меня нет гарантии, что пользователь все файлы обновит как положено. Может получиться так, что несколько файлов останется не обновлёнными. Получается неконтроллируемый код, я не знаю, что там у пользователя обновлено, а что нет. 3. Придёться делать контроль версий, потому что мне нужна гарантия, что будет работать именно тот компонент, на который я рассчитывал. 4. Поскольку я для безопасности всё-равно не буду полагаться на то, что у пользователя все компоненты обновлены, а самое интересное, что у каждого пользователя будет своя специфическая комбинация версий компонентов, и какая у кого никогда не угадаешь. Получается, 100% нельзя быть уверенным, что программа заработает, а она может ещё и заработать неправильно, что может привести к потере данных или их искажению. А поскольку все компоненты программы надо для гарантии тащить с собой, ну не проще ли тогда всё слить в один файл, всё равно суммарное количество памяти на накопителе и в ОЗУ будет тем же, ну нет никакой выгоды от этого .dll. Зато когда всё в одном файле, появляется уверенность, что всё будет работать как надо, и никогда не будет головной боли по поводу версий. Прошли времена малых накопителей, ОЗУ, машинный код никогда много и не занимал. Всё равно практика показала, что программы для гарантии тащут с собой .dll, что сводит на нет всю идею. Некоторые программы были без .dll, значит была статическая линковка. Вот почему в своё время всё глючило и падало, а я то думал... Добавлено через 7 минут Идея этой концепции модульности исходила из убеждённости, что все компоненты системы будут обновляться своевременно, но это оказалось нереально, ОС слишком большая, много разных программ, невозможно все версии проконтроллировать. Проще увеличить автономность каждой программы, тогда каждый разработчик будет ориентироваться в пределах своей программы и не учитывать что там в ОС у кого не стоит. Добавлено через 26 минут И ещё добавлю, даже если и ввести контроль версий, всё равно плохо. Если контроль версий покажет, что версии несовместимы, что мы покажем пользователю? Ошибку, указание на то, чтобы он обновился? Сами за него скачаем автоматически обновления? Это всё не годится ни в каком виде. Покажем ошибку, пользователь останется всё равно недоволен только фактом ошибки и не будет обновляться, ему лень. Сами скачаем обновления? Куда, в папку с программой? Вот так мы плавно пришли к статической линковке. Обновим ему систему? Вообще-то какая-то программа не должна лесть в ОС хотя бы из соображений безопасности, к тому же после обновления может что-то сломаться и т. д. Ну нет плюсов от .dll. Сейчас накопители несколько Терабайт, ОЗУ уже от 8 Гб, дальше будет больше, зачем усложнять себе жизнь, любая экономия машинного кода меркнет по сравнению с размером звуковых или видеоданных...
0
|
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
|
|
27.03.2016, 22:39 | 13 |
Не по теме: Горите в аду все те, кто разрабатывает ПО руководствуясь этими принципами. Вы не поверите - ЖД до 500 гб, и оперативка 2 или хотя бы 4 гб не редкость еще. Горите в аду. Извиняюсь, просто наболело немного.. По теме - динамическая линковка это удобно, но это может вызвать страшные неудобства. На линуксе. Ставим ПО, которого нет в официальных репозиториях, ставим по инструкции. Запускаем. Нет нужной библиотеки. Идем в гугл, помощь находим, ставим пару тройку зависимых пакетов ( или штук 10 если не повезет). Либо не сразу находим помощь, найдя из кучи ссылок в гугле, инструкцию о том, что же нужно поставить, для необходимой нам библиотеки. Либо пробуем качать саму библиотеку, да, так, чтобы она нам подошла. А еще бывает, что требуются несовместимые версии библиотек, необходимость найти устаревшую версию... Я знаю, это возможно не проблемы, и это просто пустяки, но посмотрим с другой стороны. Я простой пользователь. Скачал ПО. Запускаю - ошибка, не хватает чего то. Пичаль. Лезу в гугл. О, куча ссылок, какая то непонятная хрень, не буду я возится, ничего не понимаю, лучше скачаю другое ПО, аналогичное данному, может оно будет нормально работать, а про это напишу, что оно "какашка". Немного утрирую, но суть думаю ясна.
1
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
28.03.2016, 00:36 [ТС] | 14 |
Да, так и есть и я на это указал, что нужно ПО делать для пользователя максимально удобным, а наличие внешних зависимостей может привести к тому, что пользователь не будет разбираться в причине ошибки, вынесет вердикт, что разработчики ничего не умеют и будет искать работающее ПО.
Так что как то вот так вот как бы вот получается. Вот.
0
|
528 / 431 / 159
Регистрация: 25.11.2014
Сообщений: 1,662
|
|
28.03.2016, 01:45 | 15 |
Какая глупость. Своевременность не причина. Когда ты будешь писать программу, подумай, зачем ты ее разделяешь на отдельные файлы и функции. Здесь тот же принцип. Желательно думать головой.
Их не нужно контролировать.
Фу так делать, не приходите к нам в линукс. Пхахах, ученый совет Версии чего не совместимы? Автор, вы здоровы? У приложения есть зависимость на версию 1. Она никуда не денется. Какая там у тебя несовместимость? Твоя гипотетическая ситуация - выдумка незнающего человека. Добавлено через 7 минут Усложняют себе жизнь только в винде, таская с собой кучу либ и обновляя их у себя, выпуская новые инсталляторы, обновления и т. п.. Когда все нормальные люди понимают, что, когда бага в общем месте, общее место обновляем - все счастливы. А все виндовые приложения уязвимы, пока не почешется каждый разработчик каждого приложения. Винда со своими dll - дурдом на колесиках, порождающий дурное представлении об архитектуре у студентиков.
0
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
28.03.2016, 02:23 [ТС] | 16 |
Если мы выбираем первый вариант, то вынуждены обеспечить обратную совместимость кода, что усложняет прогресс в разработке из-за дополнительных зависимостей. Это неудобно и скорее всего невозможно, если появятся взаимоисключающие зависимости. Если мы выбираем второй вариант, то пользователь не выбирает наш продукт, потому что лень обновляться. Точно также, как машина, которая сразу купленная из магазина не заводится, точно также ПО, которое не работает из коробки - это минус репутации и повод задуматься над улучшением разработки. Добавлено через 11 минут По поводу Windows 7: На моём стационарном ПК, который работает каждый день с утра до вечера и является игровым сервером, но с учётом того, что аппаратура мощная, я: 1. Больше не имею тормозов, отклик мгновенный, всё работает мгновенно, окна открываются мгновенно. Прекрасно, я думал это невозможно, но всё летает. 2. Стабильность, у меня за несколько лет ОС ни разу не зависла, компьютер работает с утра до вечера стабильно, как атомные часы. 3. Правильная настройка фаервола и наличие бесплатного антивируса COMODO сделали своё дело - не было ни одного случая заражения, это я специально проверял не только средствами COMODO. Из-за чего я неизбежно делаю вывод: Мои тормоза закончились когда я решил купить новый и мощный ПК вместо ноутбуков. Мне не к чему придраться, я получил отличный инструмент для работы, игры и администрирования сервера. Это не ОС тормозит, это аппаратура не тянет, обновите аппаратуру, и получите отличные результаты. Добавлено через 7 минут Это явно не доработка разработчиков Линукс. Пожалуй Линукс не может конкурировать с Windows 7 в моих глазах ни при каких обстоятельствах из-за изначального отсутствия единства в вопросе универсальной системы для всех. Windows всегда была монопольно устроенной системой, универсальной, и лишь потом появилось разделение на пользователей. Windows занимает практически весь рынок ОС для пользователей, никогда не забывайте это при аргументах, это важно из-за совместимости. При всей моей любви к IPv6, он бесполезен, пока его не будет у всех, даже не смотря на то, если он будет только у меня.
0
|
jdzvk
|
28.03.2016, 02:25
#17
|
Не по теме: эмм, сори. о. линковка. как бы скачал новый live-cd от лайнукс - tails. всего 1 гигабайт.
0
|
Задачи выполнил, ушёл
27 / 30 / 7
Регистрация: 16.10.2015
Сообщений: 345
|
|
28.03.2016, 02:36 [ТС] | 18 |
Продолжение...
Как и IPv6, это же относится и к Линуксу, Вас очень мало, и это сильно мешает Вашему распространению, так получилось, и с этим придёться считаться. Если бы Вы могли предложить что-то, что будет явно круче Windows, тогда у Вас будет шанс подняться, но я считаю себя убеждённым, что этого не будет. Добавлено через 5 минут Ой, а зачем вообще мы начала обсуждать Линукс, тема вообще не про это, я забиваю на дебаты про Линукс, давайте по теме граждане, иначе тема потеряет свою изначальную суть).
0
|
jdzvk
|
28.03.2016, 03:02
#19
|
Не по теме: так я по теме. tails явно круче виндовс. даже непонятно, почему от убунта 12.04 конкуренции
0
|
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
|
|
28.03.2016, 07:36 | 20 |
0
|
28.03.2016, 07:36 | |
28.03.2016, 07:36 | |
Помогаю со студенческими работами здесь
20
Статическая линковка Статическая линковка Статическая линковка Статическая линковка? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |