Почему / clr несовместимо с / mt и / mtd в Visual Studio? - PullRequest
21 голосов
/ 02 июня 2009

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

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

1 Ответ

22 голосов
/ 02 июня 2009

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

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

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

...