В vc \ lib есть 4 версии библиотек ссылок CRT:
- libcmt.lib: статическая библиотека ссылок CRT для сборки выпуска (/ MT)
- libcmtd.lib: статическая библиотека ссылок CRT для отладочной сборки (/ MTd)
- msvcrt.lib: библиотека импорта для версии DLL CRT (/ MD)
- msvcrtd.lib: библиотека импорта для отладочной DLL-версии CRT (/ MDd)
Посмотрите на параметры компоновщика, Project + Properties, Linker, Командная строка. Обратите внимание, что эти библиотеки не упоминаются здесь. Компоновщик автоматически определяет, какой ключ / M использовался компилятором и какой .lib должен быть связан с помощью директивы комментария #pragma. Очень важно, что вы получите ужасные ошибки ссылок и трудно диагностировать ошибки времени выполнения, если будет несоответствие между параметром / M и .lib, с которым вы ссылаетесь.
Вы увидите сообщение об ошибке, которое вы процитировали, когда компоновщик получит указание на ссылку на msvcrt.lib и libcmt.lib. Что произойдет, если вы свяжете код, который был скомпилирован с / MT с кодом, который был связан с / MD. Может быть только одна версия ЭЛТ.
/ 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).