Почему /clr несовместим с /mt и / mtd в Visual Studio?

может кто-нибудь объяснить мне, как и почему /clr несовместим с /mtd ? Какова альтернатива этому? Что происходит внутри, если я использую /md или / mdd ?

насколько я знаю, мы не используем /clr и /mtd. Может кто-нибудь объяснить, есть ли способ сделать это? И, пожалуйста, объясните мне, как и почему /clr несовместим с /mt и / mtd в Visual Studio?

1 ответов


Я ожидаю, что ключ дается здесь:

Если вы используете компилятор /clr переключатель, ваш код будет связан с библиотеки импорта, msvcmrt.движение за освобождение. Этот импорт библиотеки ссылок новый библиотека, msvcm80.dll, которая обеспечивает прокси между управляемым кодом и родная ЭЛТ. Нельзя использовать статически CRT ( /MT или /MTD опции) с /clr. Используйте динамически связанные библиотеки (/MD или /миннорозыскные собаки) вместо.

флаг /clr заставляет ваш код ссылаться на новую dll msvcm80.dll-это действует как прокси-сервер между управляемым кодом и CRT. Трудно сказать точно, что делает этот прокси, но я думаю, что он действует как интерфейс для распределения в управляемой куче, сборке мусора, управляемых потоках и тому подобном. Если вы свяжете статические версии CRT, прокси-сервер не сможет перехватывать ваши вызовы библиотек времени выполнения.