Почему библиотека MSCVRT генерирует конфликты во время соединения?[дубликат]
-
23-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Я создаю проект на Visual C ++ 2008, который является примером приложения на основе MFC для статической библиотеки классов C ++, которую я скоро буду использовать в своем собственном проекте.При создании конфигурации отладки я получаю следующее:
предупреждение LNK4098:defaultlib 'MSVCRT' конфликтует с использованием других библиотек;используйте /NODEFAULTLIB:библиотека
После использования рекомендуемой опции (путем добавления "msvcrt" в поле "Игнорировать конкретную библиотеку" в настройках компоновщика проекта для конфигурации отладки) программа подключается и работает нормально.Однако я хотел бы выяснить, почему возник этот конфликт, почему я должен игнорировать критическую библиотеку, и следует ли мне ожидать проблем позже, если я добавлю игнорирование, или что произойдет, если я этого не сделаю (потому что программа все равно создается).
В то же время конфигурация выпуска предупреждает:
предупреждение LNK4075:игнорирование '/EDITANDCONTINUE' из-за спецификации '/OPT:ICF'
предупреждение LNK4098:defaultlib 'MSVCRTD' конфликтует с использованием других библиотек;используйте /NODEFAULTLIB:библиотека
Я предполагаю, что суффикс "D" означает, что это отладочная версия среды выполнения vc ++, понятия не имею, почему это используется на этот раз.В любом случае, добавление "msvcrtd" в поле игнорирования вызывает множество ошибок ссылки в форме:
ошибка LNK2001:неразрешенный внешний символ __imp___CrtDbgReportW
Любая информация очень ценится.
Решение
Обычно это происходит, когда вы связываетесь со статической библиотекой, которая использует другую версию среды выполнения VC ++ (C++ ->Code Generation->Runtime Library
настройка в свойствах проекта).
Другие советы
Обычно это случалось со мной, когда я (непреднамеренно) смешивал разные варианты RTL, например (как это, кажется, в вашем случае) Debug и Release или MT и ST.