Исполняемый файл C ++ - ошибка MSVCR100.dll не найдена - PullRequest
5 голосов
/ 08 августа 2011

Я скачал и скомпилировал приложение C ++ с открытым исходным кодом, Frhed .

Когда я запускаю скомпилированную версию, она требует MSVCR100 и несколько других DLL-файлов (часть распространяемого Visual C ++). Однако когда я запускаю исходный предварительно скомпилированный исполняемый файл Frhed, он запускается без установленного распространяемого пакета C ++.

Нужно ли изменять какие-либо параметры компиляции, чтобы отсоединить программу от распространяемых библиотек C ++?

Ответы [ 2 ]

14 голосов
/ 08 августа 2011

Исходная программа, вероятно, статически связана , тогда как вы пытаетесь динамически связать ваш исполняемый файл, что приводит к уменьшению размера файла, но зависимости от функций внутри MSVCR100.dll (v10 Microsoft C Runtime Библиотека), которая была бы включена в исполняемый файл, если бы вы статически связывали.

Чтобы статически связать библиотеки DLL, перейдите в свойства своего проекта и измените режим сборки с MD на MT. В Visual Studio 2010/2012 это свойство проекта - C / C ++ -> Генерация кода -> Библиотека времени выполнения.

7 голосов
/ 08 августа 2011

Короткий ответ: да , чем длиннее ответ, тем длиннее.

Библиотека msvcr100.dll - это версия 10.0 (т. Е. Версия Visual Studio 2010) реализации DLL среды выполнения C , которую вы, вероятно, запросили, используя / Опция компиляции MD. Чтобы избежать использования динамически связанной версии среды выполнения, вместо нее можно использовать параметр / MT и статически связать среду выполнения.

Кроме того, вы можете распространять msvcr100.dll (и другие файлы) вместе с вашей программой.

...