2010-01-09 6 views
12

Как вы указываете Visual C++ Express 2008 статически связывать библиотеки времени выполнения вместо динамического? Мои exes в настоящее время не работают на компьютерах без какой-либо VS-установки, и я хотел бы изменить это. :)Static Runtime Library Linking для Visual C++ Express 2008

ответ

9

Извините, у меня нет VC++ Express для тестирования, но в стандартной версии я использую Project Properties -> Configuration Properties -> C/C++ -> Generation Code -> Runtime Library. Dll и Dll Debug предназначены для динамической компоновки.

7

Вы на 100% уверены, что хотите это сделать? Пожалуйста, учтите, что если вы это сделаете и есть уязвимость безопасности, обнаруженная в библиотеке времени выполнения, Microsoft не сможет исправлять ваше приложение через Центр обновления Windows.

Другое решение заключается в том, чтобы упаковать Visual C++ Runtime, распространяемое вместе с вашим приложением. Он устанавливается очень быстро и не требует Visual Studio. Также важно отметить, что вам не следует распространять код, связанный с библиотеками времени выполнения отладки, поскольку для них требуется Visual Studio. См. Это blog post для получения дополнительной информации о упаковке распространяемого.

EDIT: С учетом сказанного, это зависит от вас. Моя точка зрения состоит в том, что вы не должны игнорировать динамическую привязку, основанную исключительно на идее, что пользователи должны иметь «какой-то VS установлен», что неверно.

+0

Вам нужно было обратить вспять и не заметить, теперь у вас нет и нет. : P – GManNickG

+7

Есть много веских причин, чтобы предпочесть статическую привязку. Я лично уделяю приоритетное внимание «сохранению моего здравомыслия» довольно высоко, и это несовместимо с обручами Microsoft, требующими от вас перепрыгнуть, чтобы распределить время выполнения VC++. – jalf

+0

@ Jalf - Я согласен, что это предпочтение, и есть компромиссы. Я отредактировал свой ответ. –

3

См. Ответ на этот вопрос: 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 явно.

0

Вы можете установить повторный набор времени выполнения C на целевом компьютере, и исполняемый файл будет работать там, а также с динамически связанной средой C.

(О, извините, об этом уже упоминалось).

 Смежные вопросы

  • Нет связанных вопросов^_^