Автономная программа VS 2010 C ++ - PullRequest
1 голос
/ 15 февраля 2011

Прошло много времени с тех пор, как я использовал VS 2010 и C ++, и когда я возвращаюсь к его использованию, я сталкиваюсь с теми же проблемами, которые мучили меня в прошлом году: исполняемый файл, который я компилирую, не делает хорошо работать на старых машинах, которые не имеют правильных сред выполнения C ++. Я даже не знаю, какую ссылку им дать, и я сказал им установить this после того, как у них произошла ошибка «Программа не может запуститься, потому что MSVCR100.dll отсутствует на вашем компьютере. Попробуйте переустановить». программа для решения этой проблемы. Нажмите кнопку ОК, чтобы закрыть приложение. "). Поэтому я вошел и установил генерацию кода в / MT и отключил довольно много опций, и попытался возиться с большим количеством опций, но результат все тот же.

У меня вопрос: есть ли полный список распространяемых дистрибутивов VS 2010 C ++, которые я могу просто дать и попросить их установить, чтобы все программы на C ++, которые я компилирую на VS 2010, работали на Windows XP или, что еще лучше, способ генерации автономного EXE-файла, который содержит все необходимое для работы, и не полагаться на DLL? Я думаю, как ссылки на библиотеку, в которой есть все ссылки exe. Если это поможет, я собираю для x64 и x86.

P.S. Что случилось с файлом манифеста, я должен включить его или нет?

Ответы [ 5 ]

6 голосов
/ 15 февраля 2011

Самое простое, что нужно сделать, это просто установить распространяемый пакет VC ++. Он имеет версии x86 и x64 .

4 голосов
/ 15 февраля 2011

Во-первых, прежде чем я действительно дам вам детали:


Внимание * * 1004 Если вы сделаете это, все будет плохо по двум причинам: Если во время выполнения MSVC есть ошибки безопасности или другие ошибки, и вы используете этот подход, они встраиваются в ваше приложение, что означает, что вам нужно распространять повторно. DLL предпочтительнее, потому что теоретически люди используют обновление системы, что означает исправление любых ошибок. Все остальное, что вы компилируете в свой exe, также должно делать это. Если вы этого не сделаете, вы получите две версии кода, и то, что вы используете, не будет ссылаться. Одним из возможных решений является включение среды выполнения MSVC в ваше приложение с помощью опции cl.exe (настройки компилятора C / C ++) /MT, которая означает многопоточную версию среды выполнения C / C ++, статически связанную. Как я уже сказал, если вы попытаетесь связать что-то, что динамически связано с средой выполнения, вы попадете в беспорядок. Кроме того, как я уже сказал, это является дополнительным фактором риска для безопасности, так что имейте это в виду. Другие варианты - написать программу установки, которая может либо загрузить соответствующую среду выполнения, либо включить необходимую DLL. Если вы используете какую-либо функцию среды выполнения, которая превышает определенную версию Windows (общее утверждение, но это действительно так), то вы сможете использовать Windows SDK для нацеливания на различные версии Windows, используя соответствующие среды выполнения C.

3 голосов
/ 15 февраля 2011

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84

Google текст: Visual Studio C ++ Redist

Не статически ссылаться на время выполнения; в частности, не делайте этого, если вы используете какую-либо DLL для других целей. Он вводит все виды поддельных проблем с управлением кучей, с которыми вы, вероятно, не хотите связываться.

1 голос
/ 15 февраля 2011

Откройте диалоговое окно свойств вашего проекта и выберите Свойства конфигурации |C / C ++ |Генерация кода.Значением по умолчанию является многопоточная DLL.Измените это на Многопоточность, и вы будете собирать и .EXE со статически связанной средой выполнения. Не забудьте сделать то же самое для отладочной версии.

Если вы используете MFC илиATL, вам нужно будет перейти к Configuration Properties |Общие и установите «Использование MFC» или «Использование ATL» для статической ссылки.

Примечание: если вы статически связываете среду выполнения, вы должны убедиться, что любая другая библиотека, на которую вы ссылаетесь, также ссылаетсяэто статически.В противном случае вы получите две копии среды выполнения в памяти, каждая со своей кучей, и произойдет плохое, когда код, использующий одну среду выполнения, попытается освободить объект, выделенный другой средой выполнения.

0 голосов
/ 15 февраля 2011

Этот предыдущий ответ должен быть верным для VS2010. Я все еще строю с VS2005, но все мои приложения используют статический ЭЛТ по единственной причине возможности работать на старых и более новых машинах.

...