Развертывание приложения Qt на 32-битной win7 - работает (и компилируется) на Win7 x64
Ну, я потратил день на поиск решения и все прочитал, но я не могу развернуть свое приложение Qt, поэтому я решил спросить.
Я использую Qt 5.2.1 через надстройку Visual Studio в VS 2013 Ultimate, версия qt - msvcr2012. У меня есть версия Qt 5.2 для x86 (теперь третья снизу на странице загрузок Qt).
Я нацеливаюсь на Win7 32-bit.
Моя ОС Windows7 64-битная, я создаю приложение дляwin32
, release
/o2 (max speed)
оптимализация,/MD (dynamic C runtime)
со связанными библиотеками:
qtmain.lib
Qt5Core.lib
Qt5Gui.lib
Qt5Widgets.lib
Qt5PlatformSupport.lib //this one is added by me, the others are automatically set with the Qt-AddIn template.
Я создаю его и в папку релиза помещаю следующее:
РЕДАКТИРОВАТЬ: из-за версии моего компилятора, я также распространяю vs2012 dll.s, как вы видите.
.../release /plugins /platforms
Я установил путь к дополнительной библиотеке (только для 100% -го шанса найти их):
void registerPluginsDir(QDir& exeDir)
{
QString pluginsRelPath = "plugins";
QString platformsRelPath = "platforms";
QString pluginsPath = exeDir.absoluteFilePath(pluginsRelPath);
QString platformsPath = QDir(pluginsPath).absoluteFilePath(platformsRelPath);
QStringList pathes = QCoreApplication::libraryPaths();
pathes << pluginsPath;
pathes << platformsPath;
QCoreApplication::setLibraryPaths(pathes);
for (auto i : pathes)
qDebug() << i << "\n";
};
int main(int argc, char *argv[])
{
QString exePath = QString::fromUtf8(argv[0]);
QFileInfo exeInfo(exePath);
QDir exeDir(exeInfo.absolutePath());
registerPluginsDir(exeDir);
QApplication a(argc, argv);
KeyGenerator w;
w.show();
return a.exec();
};
Пути правильные. С помощью отладчика я увидел, что они были загружены из папки моего приложения, а не из главной папки Qt.
С зависимости от.exe я все проверил. Я получаю только 2 предупреждения, без ошибок:
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
Я скопировал .dll-s в соответствии с .dll-s, загруженными при отладке приложения в Visual Studio. Единственная разница между зависит от.exe и отладки, что в VS системы dll-ы были загружены из SysWOW64, а не system32.
Со всем этим на моем (разработчике) ПК он работает безо всякой ошибки, но на тестовом (Win7 32-битный на Microsoft Virtual PC) ПК я получаю «печально известную» ошибку:
Failed to load platform plugin “windows”. Available platforms are:
(and here there are the full pathes to the .dll-s,
eg: D:\cproj\keygen\win32\Release\plugins\platforms\qwindows.dll, so it must have found them.
Я тоже следил за этим:http://qt-project.org/wiki/Deploy_an_Application_on_Windows.
Переименованный в Qt-dir, консоль выводит только папку выпуска в виде входных данных библиотеки (не папки Qt, как в моем первом тесте). Загрузил dll-ы из папок приложения, запустил хорошо. Тем не менее, на моем виртуальном ПК или на пакете моего брата (Win7 32bit) это выдает мне ошибку.
Как запустить его на 32-битной машине? Я пробовал это с каждой сборкой, release-win32, debug-win32, ни одна из них не работает. Я не могу протестировать его на большем количестве машин, на XP он даже не может загрузить C-runtime, но это не целевая платформа.
Для получения дополнительной информации, пожалуйста, прокомментируйте.
РЕДАКТИРОВАТЬ: Ходок зависимости на целевом ПК показывает то же самое, что и на ПК разработчика. Он все еще находит плагины, но не может загрузить.