Библиотека времени выполнения C загружена неправильно -QT

У меня есть приложение QT, которое использует LIB, зависящее от C++ MSVCR90.dll 2008 года. Когда я развертываю свое приложение, на некоторых компьютерах появляется следующая ошибка: screenshot

как я могу решить эту проблему? кто-то упомянул мне, что если я включу файл манифеста, это должно помочь. поэтому я подготовил следующий файл манифеста:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="*" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

в файле .pro я добавил следующее:

CONFIG += embed_manifest_exe
win32:CONFIG(release, debug|release) {
 QMAKE_POST_LINK = $$quote(C:/Program Files (x86)/Windows Kits/8.1/bin/x64/mt.exe -nologo -manifest \"ISHEmulauncher.exe.manifest\" -outputresource:$(DESTDIR_TARGET);1)
 }
 else:win32:CONFIG(debug, debug|release) {
 QMAKE_POST_LINK = $$quote(C:/Program Files (x86)/Windows Kits/8.1/bin/x64mt.exe -nologo -manifest \"ISHEmulauncher.exe.manifest\" -outputresource:$(DESTDIR_TARGET);1)
 }

но созданный манифест отличается от подготовленного мной и не включает зависимость от VS90, поэтому я все еще сталкиваюсь с той же ошибкой.

какие-либо предложения? Спасибо!


person one    schedule 12.02.2014    source источник


Ответы (2)


Распространяемые файлы довольно раздражают в управлении. Обычно мне нужно было запустить распространяемый установщик MSVC C++ на каждой машине развертывания (как часть процесса установки), чтобы избежать этой ошибки.

Статья здесь может пролить свет на ситуацию:

http://msdn.microsoft.com/en-us/library/ms235299(v=vs.90).aspx

https://qt-project.org/doc/qt-5.0/qtdoc/deployment-windows.html#application-dependencies

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

http://www.microsoft.com/en-us/download/details.aspx?id=29

http://www.microsoft.com/en-us/download/details.aspx?id=26368

Кроме того, если ваше приложение скомпилировано для 32-разрядной версии, вам нужны только 32-разрядные распространяемые компоненты. Если вы скомпилировали свое приложение в x64, вам нужны 64-битные распространяемые файлы.

Связанный:

Развертывание Qt5 в Windows

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

person phyatt    schedule 12.02.2014
comment
Ошибка появляется, даже если установлен распространяемый пакет MSVC C++. - person one; 13.02.2014
comment
установлены 32-битные, x86 или x64? Какие настройки компилятора вы использовали при создании приложения? - person phyatt; 13.02.2014
comment
установлены и 32 и 64. я использовал 64 компилятор. - person one; 14.02.2014

Я решил проблему, сняв флажок «теневая сборка» в QT. после этого файл манифеста, который я определил, не был проигнорирован, и библиотека была загружена правильно.

person one    schedule 17.02.2014