Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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