Как удалить зависимость msvc dll (пример: msvcr100.dll) для запуска приложения qt? Я разработал приложение qt, которое отлично работает на машине разработчика, но не может работать на любой другой машине, выдает сообщение об ошибке «программа не может запуститься, потому что на вашем компьютере отсутствует MSVCR100.dll». Я могу решить эту ошибку, скопировав этот файл в папку приложения, но я не хочу копировать, вместо этого я хочу связать статически или каким-либо другим способом удалить эту зависимость.

Заранее спасибо

2
Wagmare 10 Янв 2014 в 15:08

2 ответа

Лучший ответ

Проблема в том, что вы, вероятно, пытаетесь запустить приложение на компьютере, на котором установлена ​​версия Visual Studio (MSVC), отличная от той, которая использовалась для создания самого приложения.

Как правило, правильным решением является установка соответствующего распространяемого пакета Visual Studio на целевом компьютере. Это не «обходной путь» или «взлом», потому что, если вы хотите использовать приложение, построенное с различными библиотеками времени выполнения и т. Д., То это ожидаемо. Здесь вы можете прочитать об этом подробнее:

Распространение файлов Visual C ++

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

Другой способ решить эту проблему - создать приложение в той же среде, которая установлена ​​на целевой машине, но это может легко пойти не так, если вам нужно поставить приложение на несколько машин с универсальной настройкой. Я бы сказал, что это «хакерский» подход.

Вам нужно будет скачать распространяемый пакет для этой конкретной проблемы отсюда:

Распространяемый пакет Microsoft Visual C ++ 2010 (x86)

Распространяемый пакет Microsoft Visual C ++ 2010 (x64)

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

4
manuel 6 Фев 2015 в 14:24

Насколько мне известно, вы не можете статически ссылаться на Visual Studio Redistributable. Любое приложение, созданное с помощью компилятора Visual Studio, требует для запуска соответствующего файла msvcXXX.dll. Установщики, содержащие все dll для каждой конкретной версии MSVC, доступны здесь: http: / /search.microsoft.com/en-us/DownloadResults.aspx?q=redistributable

Если вы хотите избежать ошибок для пользователей при распространении приложения, у вас есть решение. Обычно используется установка правильного распространяемого пакета перед установкой вашего приложения на пользовательском компьютере. Часто используемые инструменты (NSIS, Inno Setup и т. Д.) Имеют параметры для запуска других исполняемых файлов в процессе. И каждый пакет Microsoft Redist можно запускать в автоматическом режиме (без отображения окна пользователю).

Примечание: эта проблема абсолютно не связана с qt. Он поступает непосредственно из выбранного вами компилятора.

2
Antwane 10 Янв 2014 в 11:25