Для кросс-платформенного программного проекта, который построен на Linux и Windows, мы имеем различные способы обработки сторонних библиотек. В Linux мы создаем и сопоставляем версии, распространяемые с дистрибутивом CentOS/RHEL, что означает, что мы связываемся с релизными сборками, тогда как в Windows мы поддерживаем наши собственные пакеты сторонних библиотек, а в Windows мы создаем две версии каждой библиотеки - релиз версии, которая связывает msvcr100 и msvcp100 и отладочную версию, которая связывает msvcr100d и msvcp100d.Is/nodefaultlib: msvcr100 правильный подход к обработке msvcr100.dll vs msvcr100d.dll defaultlib issue
Мой вопрос заключается в том, нужно ли создавать отладочную версию зависимостей сторонних разработчиков от Windows или мы можем просто использовать/nodefaultlib: msvcr100 при построении отладочных сборников нашего собственного программного обеспечения.
Следующий вопрос: где я могу узнать о передовой практике в этом отношении. Я прочитал страницы MSDN о времени выполнения msvc, но в плане рекомендаций очень мало.
EDIT:
Позвольте мне перефразировать вопрос более сжато. С VS2010, в чем проблема с использованием/nodefaultlib: msvcr100 для связывания исполняемой сборки с/MDd при связывании с библиотеками, которые скомпилированы с/MD.
Моя мотивация для этого заключается в том, чтобы не создавать как выпускную, так и отладочную версию сторонних библиотек, которые я использую. Также я хочу, чтобы моя отладочная версия работала быстрее.
Из документа/MD,/MT,/LD (используйте Run-Time Library):
MD: Вызывает приложение для использования в multithread- и DLL конкретной версии пробега . Определяет _MT и _DLL и заставляет компилятор помещать имя библиотеки MSVCRT.lib в файл .obj.
Приложения, скомпилированные с этой опцией, статически связаны с MSVCRT.lib. Эта библиотека предоставляет слой кода, который позволяет компоновщику разрешать внешние ссылки. Реальный рабочий код содержится в MSVCR100.DLL, которая должна быть доступна во время выполнения для приложений, связанных с MSVCRT.lib
/MDD: Определяет _DEBUG, _MT и _DLL и вызывает приложение для использования отладки многопоточных - и DLL-специфичную версию библиотеки времени выполнения. Это также заставляет компилятор помещать имя библиотеки MSVCRTD.lib в файл .obj.
Таким образом, нет никакой документации о каких-либо различиях, связанных с сгенерированным кодом, отличным от _DEBUG.
Привет Ханс, спасибо за ответ. Это не совсем то, что я ищу, но я возьму на себя вину за это. Мой вопрос плохо сформулирован. Я обновлю его в ближайшее время. – pong