В чем разница между ссылками на libeay32MD.lib и libeay32MT.lib? - PullRequest
8 голосов
/ 03 января 2011

У меня есть стороннее приложение с исходным кодом, которое в настоящее время настроено на сборку libeay32MD.lib. Но это приложение, а не библиотека. Разве это не должно быть построено против libeay32MT.lib тогда? Какая разница между двумя?

Существуют следующие варианты библиотек:

  • libeay32MD.lib
  • libeay32MDd.lib
  • libeay32MT.lib
  • libeay32MTd.lib

и "статичные" с одинаковыми именами. Можете ли вы объяснить разницу между ними?

Ответы [ 3 ]

10 голосов
/ 29 марта 2011
  • MD для динамического выпуска
  • MDd для динамического отладки
  • MT для статического выпуска
  • MTd для статического-debug

Исходная статья через archive.org [^ 1].

[^ 1]: Исходная ссылка

10 голосов
/ 03 мая 2012

Эти варианты определяют, какая библиотека C ++ используется и какой тип кода генерируется, хотя доступен только «M», то есть многопоточный, однопоточных опций больше нет.

  • MTd = многопоточный код отладки и ссылки на статическую библиотеку отладки C ++
  • MDd = многопоточный отладочный код и связь с динамической (DLL) библиотекой отладки C ++
  • MT = Многопоточный, ссылка на статическую библиотеку C ++
  • MD = Многопоточный, связь с динамической (DLL) библиотекой C ++

Только что отредактировал - извините, коды были в неправильном порядке.

Редактировать 2: Подробнее ...

Эти флаги являются параметрами C ++ и не имеют отношения к ssleay32.dll и libeay32.dll. Существует 8 версий libeay32 - 4 для статической сборки (нет зависимости от ssl / libeay32.dll) и 4 для динамической сборки (требуется ssl / libeay32.dll). Каждый из 4 разделен на тип библиотеки C ++ обязательно ...

C ++ доступен для статической или динамической связи с вашим приложением, и для каждого из этих типов вы можете использовать библиотеки отладки или библиотеки выпуска.

/ MT и / MTd (статические) не требуют распространяемого кода C ++, поскольку все вызовы C / C ++ содержатся внутри вашей скомпилированной программы. Если каждый модуль (не только ssleay & co.), На который вы ссылаетесь, использует эти параметры, ваше приложение будет полностью автономным с точки зрения зависимостей C ++.

/ MD и / MDd (динамические) требуют, чтобы распространяемые DLL C ++ были установлены на целевом компьютере. Для / MD выпуски легко загружаются из MSFT, но вам также нужно отметить, какую версию Visual C ++ вы использовали - например, VC ++ 2008, VC ++ 2010 и т. Д. Существует множество версий распространяемого ПО, которые могут вам понадобиться. Для / MDd библиотеки будут на вашем компьютере разработчика, но для этого нет общего выпуска MSFT - но вы можете создать свой собственный установщик, если необходимо, используя Visual Studio; обычно / MDd используется только разработчиком для тестирования.

Версии SSLEAY и т. Д. В исходном вопросе не указывают, какая версия 2005/2008/2010 и т. Д. Visual C ++ использовалась для компиляции версий MD, но после компиляции это можно заметить из встроенной цели с помощью средства просмотра зависимостей (например, зависит.exe). Например. если ваше приложение зависит от MSVCR90.DLL, то это означает VC ++ 9 (это сбивает с толку, это распространяемый в 2008 году).

Всем разработчикам нужна возможность выбрать статическую или библиотечную связь DLL, вот несколько примечаний по каждому из них:

Статическая связь:

  • автономный, простой в установке, большой объем кода, дублирование кода при создании нескольких dll и exe.

Динамическая связь:

  • меньшая занимаемая площадь, исправления ошибок из обновлений MSFT, общий код, немного сложнее в установке

Если в библиотеке есть код, который возвращает объект C / C ++ (например, выделенную память, std :: string и т. Д.), обязательно связывает ваш код с теми же флагами, которые использовались для компиляции библиотека, без исключений.

0 голосов
/ 27 марта 2011

Исходя из названий, одна библиотека предназначена для многопоточности, а другая - для многопоточности с символами отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...