Windows все еще использует библиотеки DLL и Mac, похоже, вообще не использует DLL. Являются ли они преимуществами или недостатками использования любой техники?
Оба используют общие библиотеки, они просто используют другое имя.
Если установка программы включает в себя всю требуемую DLL, чтобы она работала на 100% хорошо, будет ли она такой же, как статическая привязка всех библиотек?
В некоторой степени. Когда вы статически связываете библиотеки с программой, вы получите один очень большой файл с DLL, у вас будет много файлов.
Статически связанный файл не будет нуждаться в шаге «разрешенные общие библиотеки» (который происходит во время загрузки программы). Давным-давно, загрузка статической программы означала, что вся программа была сначала загружена в ОЗУ, а затем шаг шага «Разрешить разделяемые библиотеки». Сегодня только по заказу загружаются только те части программы, которые фактически исполняются. Таким образом, с помощью статической программы вам не нужно разрешать DLL. С DLL, вам не нужно загружать их все сразу. Так что умение работать, они должны быть на уровне.
Который оставляет «DLL Hell». Многие программы в Windows приносят все DLL-файлы, которые им нужны, и записывают их в каталог Windows. Чистый эффект заключается в том, что последние установленные программы работают, и все остальное может быть нарушено. Но есть обходное решение: установите DLL в тот же каталог, что и EXE. Сначала Windows будет искать текущий каталог, а затем различные пути Windows. Таким образом, вы потратите немного места на диске, но ваша программа будет работать, и, что более важно, вы больше ничего не сломаете.
Можно утверждать, что вы не должны устанавливать DLL-файлы, которые уже существуют (с той же версией) в каталоге Windows, но затем вы снова уязвимы для какого-либо плохого приложения, которое перезаписывает версию, которая вам нужна, с чем-то, что нарушает вашу шея. Недостатком является то, что вы должны сами распространять исправления безопасности для своего приложения; вы не можете полагаться на Windows Update или подобные вещи, чтобы защитить свой код. Это плотное место; крекеры делают много денег из проблем безопасности, и люди не будут вам нравиться, когда кто-то украдет их банковские данные, потому что вы не выпустили исправления безопасности достаточно скоро.
Если вы планируете поддерживать приложение очень плотно для многих, скажем, 20 лет, установка всех DLL в каталоге программы для вас. Если нет, напишите код, который проверяет, что установлены подходящие версии всех DLL, и сообщите об этом пользователю, поэтому они знают, почему ваше приложение внезапно начинает сбой.
Возможный дубликат [Когда использовать динамические и статические библиотеки] (http://stackoverflow.com/questions/140061/when-to-use-dynamic-vs-static-libraries) –