DLL против статической библиотеки (опция библиотеки MSVC9 RunTime) - PullRequest
1 голос
/ 23 июля 2011

Для проекта MSVC9 Win32 следующие параметры отображаются в разделе «Свойства конфигурации» -> «C / C ++» -> «Кодирование» -> «Библиотека времени выполнения»:

/ MT, / MTd, / MD, / MDd

правильно ли использовать DLL / MTd и статическую lib / MDd?

Спасибо.

1 Ответ

5 голосов
/ 23 июля 2011

Здесь есть две проблемы.

Во-первых, вам нужно выбрать, хотите ли вы Debug версию CRT или Release версию.,Отладочные версии имеют специальные проверки и пути кода, разработанные, чтобы помочь вам обнаруживать ошибки при написании приложения.Вы должны не использовать их для окончательной версии приложения, поскольку они могут замедлить его выполнение и не могут свободно распространяться.

Затем вам нужно решить, хотите ли вы статически связать среду выполнения с вашим приложением или, если вы хотите использовать динамически из DLL.Статическое связывание позволяет вам создать автономный EXE-файл без каких-либо зависимостей от каких-либо DLL-файлов;он эффективно компилирует исполняемый код в двоичный файл вашего приложения.Это может упростить развертывание, но за счет невозможности воспользоваться преимуществами безопасности и других обновлений, вносимых в библиотеки DLL времени выполнения.Вам придется перекомпилировать приложение, чтобы воспользоваться новыми обновлениями во время выполнения.Динамическое связывание - это типичный (и рекомендуемый) путь для приложений Windows.Это означает, что ваше приложение потребует наличия соответствующих версий DLL-библиотек CRT для его запуска, но оно позволяет легко обновлять библиотеки времени выполнения и означает, что несколько программ могут совместно использовать один и тот же код, уменьшая их размерна диске.

Итак, /MD означает динамически связанный, а /MT означает статически связанный.Строчные буквы d после каждой опции указывают на то, что используется debug версия библиотек времени выполнения.

/ MD = динамическисвязана с релизной (распространяемой) версией CRT

/ MDd = динамически связана с отладочной (нераспространяемой) версией CRT

/ MT = статически связан с релизной (распространяемой) версией CRT

/ MTd = статически связан с отладочной (нераспространяемой) версией CRT

Более подробная информация доступна на MSDN .

...