Как вы указываете Visual C++ Express 2008 статически связывать библиотеки времени выполнения вместо динамического? Мои exes в настоящее время не работают на компьютерах без какой-либо VS-установки, и я хотел бы изменить это. :)Static Runtime Library Linking для Visual C++ Express 2008
ответ
Извините, у меня нет VC++ Express для тестирования, но в стандартной версии я использую Project Properties -> Configuration Properties -> C/C++ -> Generation Code -> Runtime Library. Dll и Dll Debug предназначены для динамической компоновки.
Вы на 100% уверены, что хотите это сделать? Пожалуйста, учтите, что если вы это сделаете и есть уязвимость безопасности, обнаруженная в библиотеке времени выполнения, Microsoft не сможет исправлять ваше приложение через Центр обновления Windows.
Другое решение заключается в том, чтобы упаковать Visual C++ Runtime, распространяемое вместе с вашим приложением. Он устанавливается очень быстро и не требует Visual Studio. Также важно отметить, что вам не следует распространять код, связанный с библиотеками времени выполнения отладки, поскольку для них требуется Visual Studio. См. Это blog post для получения дополнительной информации о упаковке распространяемого.
EDIT: С учетом сказанного, это зависит от вас. Моя точка зрения состоит в том, что вы не должны игнорировать динамическую привязку, основанную исключительно на идее, что пользователи должны иметь «какой-то VS установлен», что неверно.
См. Ответ на этот вопрос: How do I make a fully statically linked .exe with Visual Studio Express 2005 ?. Это для VS2005 Express, но ответ по-прежнему сохраняется.
Для C-исполнения идти к проекту настройки, выбрать C/C++, затем 'Код Generation. Измените параметр 'runtime library' на 'multithreaded' вместо 'многопоточной dll'.
Если вы используете какие-либо другие библиотеки вам может понадобиться, чтобы сказать компоновщик игнорировать динамически связанный CRT явно.
Вы можете установить повторный набор времени выполнения C на целевом компьютере, и исполняемый файл будет работать там, а также с динамически связанной средой C.
(О, извините, об этом уже упоминалось).
Вам нужно было обратить вспять и не заметить, теперь у вас нет и нет. : P – GManNickG
Есть много веских причин, чтобы предпочесть статическую привязку. Я лично уделяю приоритетное внимание «сохранению моего здравомыслия» довольно высоко, и это несовместимо с обручами Microsoft, требующими от вас перепрыгнуть, чтобы распределить время выполнения VC++. – jalf
@ Jalf - Я согласен, что это предпочтение, и есть компромиссы. Я отредактировал свой ответ. –