Я застрял в проблеме развертывания с моим приложением Qt 5.4.0.
После двух дней исследований мое приложение не хочет запускаться на Windows XP!
Я создал папку для развертывания с помощью windeployqt, предоставленной моей установкой Qt. Когда я дважды нажимаю на * .exe, я всегда:
The procedure entry point vsprintf_s could not be located in the dynamic link library msvcrt.dll.
Ходок за зависимостями действительно не помог мне, и я не знаю, что я могу попробовать сейчас.
Замечания :
Хотя Гильем Г. прав в широком смысле, это не значит, что вы на самом деле назвали эту функцию самостоятельно (обращаясь сейчас к теоретически другому человеку, сталкивающемуся с этой проблемой, как я, хе). Я считаю, что это ошибка в поддержке MinGW XP; Я видел сообщения об ошибках аналогичный проблемы, в том числе почти та же проблема в более ранней версии Qt, которая затем была исправлена. Я не видел этого конкретного воплощения, с которым я действительно столкнулся. Я полагаю, я должен представить отчет об ошибке!
В любом случае, я исправил это без изменения какого-либо кода, который написал сам. То, что я должен был сделать, чтобы это исправить, было двояким:
Для компилятора вам понадобится либо Microsoft Visual Studio 2010 (отсюда и название), либо более старый Windows SDK, который поставляется вместе с ним; выпуск «Microsoft Windows Software Development Kit для Windows Server 2008 и .NET Framework 3.5» должен помочь вам, если у вас нет лицензии Visual Studio 2010.
После того, как один из них будет установлен, я рекомендую вам установить Qt 5.5, скомпилированный MSVC2010. Вы можете запустить новый установщик или использовать Qt Maintenance Tool, который уже должен быть установлен.
Как только этот комплект будет установлен, в вашем проекте (выбрав «Проекты» в меню слева) вы сможете перейти к «Добавить комплект» и выбрать 32-битный Qt 5.5 msvc2010, и если вы сейчас перекомпилируете и повторно развертываете свое приложение, он должен нормально работать на XP.
Теперь, почему я настаивал на том, чтобы вы обновились до Qt 5.5? Что ж, есть некоторые основные проблемы с выбором рабочего рендерера OpenGL для каждой версии Windows, и Qt 5.5 значительно упрощает это, позволяя использовать OpenGL или ANGLE в зависимости от того, какие возможности фактически обнаружены, плюс IIRC и некоторые другие связанные исправления. Поэтому, если вы, как и я, развертываете приложение QML / Qt Quick 2.0 в нескольких версиях Windows, стоит обновить его до Qt 5.5.
Ошибка была в том, что я назвал «sprintf_s» где-то в моем коде (хорошо для последних окон на моем компьютере разработчика, но не для XP).
Если у вас возникла та же проблема при поиске в вашем коде, не используйте точно имя функции в сообщении об ошибке, а используйте выражение типа * _s.
Вы, вероятно, вызываете функцию безопасного API где-нибудь!