Проблема развертывания Qt 5.4.0 — отсутствует vsprintf_s в msvcrt.dll

Я застрял в проблеме развертывания с моим приложением 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.

Ходок за зависимостями действительно не помог мне, и я не знаю, что я могу попробовать сейчас.

Замечания :

  • SDK: Qt 5.4.0 (MSVC 2010, 32 бита)
  • IDE: QT Creator 3.3.0
  • Компилятор: MinGW 4.9.1 32 бита
  • Необходимо запустить: Windows XP Pro SP2 32 бит
  • Приложение работает как шарм в Windows 7 с той же конфигурацией (IDE, компилятор и т. Д.)

0

Решение

Хотя Гильем Г. прав в широком смысле, это не значит, что вы на самом деле назвали эту функцию самостоятельно (обращаясь сейчас к теоретически другому человеку, сталкивающемуся с этой проблемой, как я, хе). Я считаю, что это ошибка в поддержке MinGW XP; Я видел сообщения об ошибках аналогичный проблемы, в том числе почти та же проблема в более ранней версии Qt, которая затем была исправлена. Я не видел этого конкретного воплощения, с которым я действительно столкнулся. Я полагаю, я должен представить отчет об ошибке!

В любом случае, я исправил это без изменения какого-либо кода, который написал сам. То, что я должен был сделать, чтобы это исправить, было двояким:

  1. Переключитесь на использование компилятора msvc2010, так как этот набор библиотек C ++, что неудивительно, прекрасно работает в Windows XP (AFAIK, они все еще не отказались от поддержки XP с последней версией).
  2. Переключитесь на Qt 5.5 (я объясню почему в конце).

Для компилятора вам понадобится либо 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.

2

Другие решения

Ошибка была в том, что я назвал «sprintf_s» где-то в моем коде (хорошо для последних окон на моем компьютере разработчика, но не для XP).
Если у вас возникла та же проблема при поиске в вашем коде, не используйте точно имя функции в сообщении об ошибке, а используйте выражение типа * _s.
Вы, вероятно, вызываете функцию безопасного API где-нибудь!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector