В vc \ lib есть 4 версии библиотек ссылок CRT:
- libcmt.lib: библиотека статических ссылок CRT для сборки выпуска (/ MT)
- libcmtd.lib: статическая библиотека ссылок CRT для отладочной сборки (/ MTd)
- msvcrt.lib: библиотека импорта для релизной версии библиотеки CRT (/ MD)
- msvcrtd.lib: importбиблиотека для отладочной DLL-версии CRT (/ MDd)
Посмотрите на параметры компоновщика, Project + Properties, Linker, Командная строка.Обратите внимание, что эти библиотеки не упоминаются здесь.Компоновщик автоматически определяет, какой ключ / M использовался компилятором и какой .lib должен быть связан через директиву комментария #pragma.Очень важно, что вы получите ужасные ошибки ссылок и трудно диагностировать ошибки времени выполнения, если существует несоответствие между параметром / M и .lib, с которым вы связываетесь.
Вы увидите сообщение об ошибке, которое вы цитировали, когдакомпоновщик должен указать как ссылку на msvcrt.lib , так и libcmt.lib.Что произойдет, если вы свяжете код, который был скомпилирован с / MT с кодом, который был связан с / MD.Может быть только одна версия CRT.
/ NODEFAULTLIB говорит компоновщику игнорировать директиву комментария #pragma, сгенерированную из скомпилированного кода / MT.Это может работать, хотя множество других ошибок компоновщика не является редкостью.Такие вещи, как errno , который является extern int в статической версии CRT, но макропрограммирован для функции в версии DLL.Многим другим это нравится.
Что ж, исправьте эту проблему правильным способом, найдите файл .obj или .lib, который вы связываете и который был скомпилирован с неверной опцией / M.Если у вас нет подсказки, то вы можете найти ее, выбрав .obj / .lib файлы для "/ MT"
Кстати: исполняемые файлы Windows (например, version.dll) имеют свою собственную версию CRT, чтобы получить свою работусделанный.Он расположен в c: \ windows \ system32, вы не можете надежно использовать его для своих собственных программ, его CRT-заголовки нигде не доступны.DLL-библиотека CRT, используемая вашей программой, имеет другое имя (например, msvcrt90.dll).