Обычное использование DLL: MFC Shared vs MFC статически связан - PullRequest
5 голосов
/ 16 апреля 2010

Когда мы создаем DLL с помощью Visual studio (VC8 или 9), мы получаем возможность создать Regular DLL

 using MFC as shared DLL

или

 using MFC as static library

Чем они отличаются?Какой из них рекомендуется использовать?

Ответы [ 3 ]

12 голосов
/ 16 апреля 2010

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

Общая библиотека вызывает библиотеку в тот момент, когда она необходима (время выполнения) для выполнения кода, но требует, чтобы пользователь установил ее (обычно определенную или минимальную версию) на свой компьютер. Вы также можете распространять необходимую версию библиотеки вместе с вашим приложением.

Что касается того, что лучше, я не знаю. Я не программист Windows C ++ или MFC, поэтому я не могу сказать. На моих серверах Linux приложения, которые я пишу, обычно являются серверными и, таким образом, используют разделяемые библиотеки.

Это зависит от того, как ваше приложение будет использоваться, распространяться, обновляться, как часто меняется библиотека MFC, если она обычно доступна на ПК пользователя и т. Д.

4 голосов
/ 19 апреля 2010

[Я думаю, что получил ответ сейчас]

Если вы используете MFC DLL в качестве динамического связывания, для вашего кода должны быть установлены библиотеки DLL библиотеки Microsoft Foundation (в частности, версия, которую требует ваш код) вместе с вашим приложением или dll на стороне пользователя. Таким образом, это означает, что ваш установочный пакет будет содержать

  • Ваше приложение / DLL и вспомогательные файлы
  • Все MFC Dlls

Это увеличивает размер установочного пакета, а также загружает пользовательские настройки установки.

Если вы ссылаетесь на MFC как статическую библиотеку, ваш код будет работать даже без библиотек MFC, представленных на стороне пользователя. Причина довольно проста в том, что все библиотеки MFC, на которые вы ссылались в своем коде, будут связаны с вашим приложением или dll. Это означает, что библиотеки MFC, используемые в вашем app / dll, становятся частью вашего двоичного файла; однако ваше приложение / DLL будет немного больше.

2 голосов
/ 08 января 2011

Еще одним соображением является обслуживание вашего приложения.

Если вы отправляете Redis MSFT, динамически связываясь с его библиотеками, а затем MSFT позже «исправляет» какой-то существенный недостаток в DLL, они исправляют DLL на компьютерах вашего клиента через обновление Windows. Если вы используете статическую ссылку, вам нужно будет обновить всех своих клиентов напрямую.

Конечно, если вы обеспокоены тем, что пропатченная DLL может нарушить работу вашего приложения (поскольку вы полагаетесь на неуказанное поведение), вы можете обратиться за обслуживанием (и тестированием) непосредственно к вашему клиенту.

...