Как построить QTcore4.dll без зависимости от MSVCx80.dll? - PullRequest
1 голос
/ 26 июня 2009

У меня есть заставка Windows, которую я хочу перекомпилировать с использованием библиотек QT, чтобы я мог сделать ее доступной для большего количества платформ. У меня проблемы с развертыванием в Vista и XP.

Я статически компилирую заставку с помощью MT и запускаю проверку зависимостей. Результаты:

MyScreensaver.SCR требуется несколько DLLS, QTCORE4.DLL, но не MSVCx80.DLL. Пока это хорошо.

Моя проблема в том, что QTCORE4.DLL, в свою очередь, нуждается в MSVCP80.DLL и MSVCR80.DLL В результате мое приложение не работает в системах Vista.

Могу ли я собрать QTCORE4.DLL, чтобы статически связать библиотеки Microsoft (может быть, Libcmt.lib?), Чтобы у меня не было зависимостей в библиотеках MS CRT?

Ограничения:

  • Я не хочу, чтобы пользователи устанавливали распространяемые файлы MS VC. Заставка занимает всего 1 МБ, и глупо просить пользователя сделать так много изменений на своем компьютере только для заставки.

  • Я не хочу использовать хитрость, чтобы поместить библиотеки MS CRT в один и тот же путь приложения с заставкой, потому что заставки установлены в system32, и я хочу установить там минимально возможные файлы.

  • Наконец, я предпочитаю создавать монолитную программу, а не набор DLL

  • Я пробовал полную статическую компиляцию и ссылку на QT, но это не разрешено (если я правильно понял LGPL), а также не рекомендуется в соответствии с этим: http://www.qtsoftware.com/developer/faqs/why-does-a-statically-built-qt-use-the-dynamic-visual-studio-runtime-libraries-do-i-need-to-deploy-those-with-my-application

После поиска решений в различных направлениях кажется наиболее целесообразным использовать QTCore4.dll и QTGui4.dll, но статически связать их с MSVCRT. Таким образом, ни моя программа, ни библиотеки QT не будут зависеть от dll MSVCRT.

Есть ли решение для этого? (Я новичок в программировании на QT)

Спасибо, Michael

Ответы [ 2 ]

1 голос
/ 21 февраля 2013

У вас есть два варианта:

  • Эти зависимости являются частью Microsoft Visual C ++ Runtime Библиотека, вы можете развернуть эту библиотеку на вашем установочном экране и установить ее в автоматическом режиме, библиотека MSVCRT не включена в Windows по умолчанию, вы необходимо развернуть библиотеку времени выполнения на вашем инсталляционном щите и скопировать библиотеки DLL Qt*.dll в каталог приложения.

  • Используйте Static Linking основных зависимостей Runtime и Qt, с этой опцией у вас есть один исполняемый файл, но для статической компиляции Qt у вас должна быть коммерческая лицензия Qt для коммерческого использования.

1 голос
/ 27 июня 2009

Я думаю, они согласны с тем, что части вашего приложения будут скомпилированы с / MD (d), а части с / MT (d), но если вы контролируете все (включая сторонние библиотеки), то довольно безопасно использовать / MT (д).

...