Для проекта кроссплатформенного программного обеспечения, основанного на Linux и Windows, у нас есть разные способы работы со сторонними библиотеками. В Linux мы собираем и связываем версии, распространяемые с дистрибутивом CentOS/RHEL, что означает, что мы связываемся с выпусками сборок, тогда как в Windows мы поддерживаем наши собственные пакеты сторонних библиотек, а в Windows мы собираем две версии каждой библиотеки — выпуск. версия, связывающая msvcr100 и msvcp100, и отладочная версия, связывающая msvcr100d и msvcp100d.
Мой вопрос заключается в том, необходимо ли создавать отладочную версию сторонних зависимостей в Windows, или мы можем просто использовать /nodefaultlib:msvcr100 при создании отладочных сборок нашего собственного программного обеспечения.
Дополнительный вопрос: где я могу узнать о передовом опыте в этом отношении. Я читал страницы MSDN о среде выполнения msvc, но там очень мало рекомендаций.
РЕДАКТИРОВАТЬ:
Позвольте мне перефразировать вопрос более кратко. В VS2010, в чем проблема с использованием /nodefaultlib:msvcr100 для связывания исполняемой сборки с /MDd при связывании с библиотеками, скомпилированными с /MD.
Моя мотивация для этого состоит в том, чтобы избежать необходимости создавать как выпускную, так и отладочную версию сторонних библиотек, которые я использую. Также я хочу, чтобы моя отладочная сборка работала быстрее.
Из документа для /MD, /MT, /LD (использовать библиотеку времени выполнения):
MD: заставляет ваше приложение использовать версию библиотеки времени выполнения, ориентированную на многопоточность и DLL. Определяет _MT и _DLL и заставляет компилятор поместить имя библиотеки MSVCRT.lib в файл .obj.
Приложения, скомпилированные с этой опцией, статически связаны с MSVCRT.lib. Эта библиотека предоставляет слой кода, который позволяет компоновщику разрешать внешние ссылки. Фактический рабочий код содержится в MSVCR100.DLL, который должен быть доступен во время выполнения для приложений, связанных с MSVCRT.lib.
/MDd: определяет _DEBUG, _MT и _DLL и заставляет ваше приложение использовать отладочную многопоточную и специфичную для DLL версию библиотеки времени выполнения. Это также заставляет компилятор помещать имя библиотеки MSVCRTD.lib в файл .obj.
Таким образом, нет никакой документации для каких-либо изменений в сгенерированном коде, кроме определения _DEBUG.