Visual C ++ не связал код с MSVCRT.DLL
(файл ОС), так как я считаю VC6.
Все версии с тех пор поставляли свои собственные библиотеки времени выполнения C и C ++, отдельно от ОС, например, MSVCRT90.DLL соответствует вашему тегу VC2008.
Приложение или проект DLL могут использовать библиотеку времени выполнения либо статически, либо в виде DLL. Нет libcmt.dll
, потому что статическое связывание не включает отдельную DLL. Код в libcmt.lib
включается в ваш .EXE или .DLL.
Теперь правильно работать - совсем другое дело. Я не рекомендую использовать dllexport
с классами C ++ или освобождать память в модуле, отличном от выделенного, но если ваш код делает то, вы ДОЛЖНЫ использовать /MD
и распространять DLL. В противном случае каждый модуль вашего приложения будет иметь отдельную копию библиотеки времени выполнения, чьи объекты и менеджеры памяти не будут взаимозаменяемыми. Причина, по которой я этого не рекомендую, заключается в том, что все модули приложения также должны быть скомпилированы с одинаковой версией и параметрами компилятора ... что действительно воняет, если у вас есть две сторонние библиотеки DLL, а версия компилятора не совпадает между ними.