Ответ 1
Технически возможно удалить эту зависимость в C, но я не уверен, что это возможно даже на С++. И в любом случае я бы не рекомендовал его. Вы теряете много вещей, которые CRT делает для вас за кулисами, большинство из которых вы не хотите, чтобы изобретать себя в худшем стиле. Во-первых, это библиотека времени выполнения, которая на самом деле вызывает вашу функцию main
, а также вызывает конструкторы и деструкторы для глобальных и статических объектов С++.
Лучшим и самым простым решением, вероятно, является изменение того, как ваше приложение ссылается на библиотеки времени выполнения. У вас есть два разных варианта: динамически и статически. Динамическое связывание более эффективно с точки зрения памяти и означает, что ваше приложение будет использовать любые исправления ошибок, которые сделаны в библиотеке. Он полагается на текущую DLL, присутствующую для запуска вашего приложения. Статическая привязка фактически внедряет код библиотеки времени выполнения в ваше приложение во время фазы ссылки сборки. Это означает, что вы можете работать без распространения DLL, но есть важные оговорки.
Для простых приложений маловероятно, чтобы эти оговорки были релевантными. Измените стиль ссылки, используемый в ваших вариантах проекта:
- Щелкните правой кнопкой мыши имя вашего проекта в обозревателе решений.
- Разверните параметр "C/С++" в левом дереве и выберите пункт "Генерация кода".
-
В поле со списком свойств "Библиотека времени выполнения" выберите один из вариантов "Многопоточность".
Отладочные сборки должны использовать "Multi-threaded Debug", в то время как сборки Release должны использовать "Multi-threaded".
Обратите внимание, что с тех пор, как вы используете VS 2010, вы все равно можете динамически связываться со временем выполнения и получить все преимущества этого без необходимости запуска установщика CRT на целевых компьютерах. Все, что вам нужно, это распространяемые DLL (ы), помещенные в ту же папку, что и исполняемый файл приложения. Это делает развертывание (и даже тестирование) очень простым и понятным. Вы найдете эти библиотеки как часть установки Visual Studio:
\Program Files\Visual Studio x.0\VC\redist\
И, конечно, отладочные версии CRT никогда не распространяются. Поскольку вам не следует распространять отладочные версии вашего приложения, это не проблема. Убедитесь, что вы скомпилировали сборку "Release" (с помощью раскрывающегося списка в верхней панели инструментов), для которой вам потребуются только распространяемые библиотеки, найденные в приведенном выше каталоге.
Не могу ли я использовать время выполнения, которое поставляется с XP?
Нет времени выполнения C, которое поставляется с любой версией Windows. Сама ОС действительно зависит от библиотеки времени выполнения C, но она использует личную версию этой библиотеки для собственного использования. Приложения не предназначены для ссылки на нее или использовать ее каким-либо образом. Вы сами по себе для развертывания всех необходимых зависимостей, и, как вы заметили, вы не можете предположить, что на целевых машинах уже установлены правильные версии.