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

Компилировать С++ в VS, не требуя MSVCP120D.dll во время выполнения

Я пытаюсь сделать двоичный файл, который может быть запущен на любой машине Windows без установленного визуального содержимого С++ (я предполагаю, что то, что MSVCP120D.dll, однако, мой поиск не был очень плодотворным относительно того, что это на самом деле), Я сделал игру для задания и хотел иметь других людей (не-devs без установки VS файла), помогите мне протестировать его, но они продолжали получать ошибки, говоря, что приведенная выше DLL отсутствует. Я не использую какие-либо материалы Visual С++ и устанавливаю флаг /Za, чтобы убедиться, что он просто ANSI С++. Поддерживает ли Visual Studio компиляцию ANSI С++, и если да, то как мне заставить его не использовать материал Visual С++, если он не поддерживает этот компилятор, который я должен использовать?

4b9b3361

Ответ 1

Как вы можете видеть здесь, MSVCP DLL является платформенной реализацией стандартной библиотеки С++. Короче говоря, это означает, что вы не можете распространять свое приложение, не требуя "материала", который предоставляют эти библиотеки. Для всех компиляторов независимо от платформы потребуется какая-то реализация стандартной библиотеки. Обычно это распространяется в виде библиотек.

Однако вы можете распространять свое приложение так, чтобы "материал" был встроен в вашу программу напрямую, а не отправлялся в отдельную DLL. Чтобы сделать это, вы должны статически связать свое приложение с стандартной библиотекой.

Есть несколько способов сделать это. Один из способов - в настройках проекта. В "Project" > "Свойства конфигурации" > "Генерация кодов C/С++" > "Библиотека времени выполнения" выберите "Многопоточность (/MT)" в отличие от "Mutithreaded (Static)".


Кстати, "D" в "MSVCP120D.dll", о котором вы говорили выше, означает "Отладка". Это означает, что вы пытаетесь распространять отладочную сборку своей программы. Вы должны (почти) никогда не делать этого. Вместо этого распределите сборки релизов.

Ответ 2

У вас есть три варианта (в том порядке, который я бы рекомендовал):

  • Не статически ссылайтесь, вместо этого получайте людей, которые хотят запустить вашу игру, установить визуальный студийный перераспределяемый пакет. 32-битная версия VC 2010 здесь: http://www.microsoft.com/en-us/download/details.aspx?id=5555

  • Статически связывать CRT (DLL, которую вы не хотите требовать во время выполнения) см. здесь для деталей: Как создать полностью статически связанный файл .exe с Visual Studio Express 2005?

  • Создайте приложение, в котором даже не используется CRT. Здесь вам придется реализовать свой собственный оператор new, который вызывает HeapAlloc(), и оператор delete, который вызывает HeapFree(), его интересную задачу;). Для этого вы указываете компоновщику игнорировать все файлы по умолчанию.

Ответ 3

Создайте статические библиотеки времени выполнения, а не версии DLL.

Перейдите в раздел "Свойства", "C/С++", "Генерация кода", "Библиотека времени выполнения" и выберите /MTd или/MT, а не опции "MDD" и "MD".

Ответ 4

Настройте проект, чтобы связать его со временем статически, а не динамически.

Ответ 5

Прежде всего, D в конце имени указал отладочную сборку. Если вы создадите сборку релизов, то она понадобится без D. Это важно, потому что microsoft не позволяет распределять библиотеки отладки без визуальной студии.

На машине, на которой вы пытаетесь запустить программу, уже может быть установлена ​​среда исполнения, так как многие программы используют ее. Если нет, то установите http://www.microsoft.com/en-us/download/details.aspx?id=30679 на машине (я думаю, что правильный, но не могу проверить в данный момент)

Ответ 6

Вам понадобится статическая ссылка, которая "строит" вызовы внешней библиотеки в ваш двоичный файл. У этого есть добавленный аффект большого двоичного файла, но в Вашем случае это не звучит как большая сделка.

С одной стороны, MSVCP120D.dll является Microsoft Visual C++ 12 debug DLL (динамическая библиотека ссылок), которая содержит все отладочные С++-библиотеки (т.е. iostream, string и т.д.). Эта библиотека - это то, что вы "выпекали" в ваш окончательный двоичный файл.

Надеюсь, что это поможет.

Ответ 7

Я столкнулся с этой ошибкой, когда попытался выполнить мой exe на другой машине, на которой была установлена ​​новая версия Visual Studio. Вам нужно изменить свойства проекта и повторно скомпилировать, чтобы это исчезло.

Для этого:

  • Откройте решение, которое вы пытаетесь запустить
  • Щелкните правой кнопкой мыши файл проекта → Свойства
  • В "Свойствах конфигурации" и "Общие" убедитесь, что "Набор инструментов платформы" настроен как правильный компилятор на вашем компьютере. Если это неверно, он должен указать рядом с ним сообщение о том, что оно не установлено.
  • Создайте и запустите код еще раз, и вам больше не придется беспокоиться.