2013-01-03 105 views
32

最近,我們一直在將基於QT的Windows應用程序從QT 4.8遷移到QT 5,並且我們遇到了部署問題。請注意,我們的應用程序沒有改變,我們只用新的QT5框架構建它。通過一些努力,我們可以使用基於VS2010的QT5庫進行構建;並且我成功地從Qt Creator運行了該應用程序。部署在QT5庫中的應用程序無法在Windows 7上啓動

正如我們對QT4所做的那樣,我們在安裝程序中包含了一套必需的QT庫。

在我們的測試階段,當我們在一臺乾淨的機器上安裝我們的QT5應用程序時;它不會啓動。不僅應用程序沒有啓動,但它沒有輸出任何錯誤。

我們通過依賴檢查器運行了應用程序;並且完全沒有缺失的庫依賴關係。

+0

我對Windows XP中同樣的問題還有,這裏的Dependency Walker報道3個irrilevant缺少的庫。我正在部署基於MinGW的應用程序。 – CapelliC

回答

37

後無進展搜索的幾天裏,我們偶然發現了一個QT錯誤:

https://bugreports.qt.io/browse/QTBUG-28766

隨着QT5,除了預期的Qt庫,msvcr100.dll和msvcp100.dll;事實證明,你必須運送你的應用程序:

platforms/qminimal.dll 
platforms/qwindows.dll 

以及。在您的本地QT5庫中找到安裝@:\ Qt5.0.0 \ 5.0.0 \ msvc2010 \ plugins \ platforms 我到處搜索,我無法在他們的文檔中找到此信息。

+2

depends.exe對你有很大的幫助,如果靜態鏈接運行庫,也不需要msvc * .dll - 注意你說的依賴沒有幫助,在這種情況下procmon.exe會有 – paulm

+1

@Aki,你知道嗎它如何在開發機器上找到qwindows.dll?它似乎需要QtCore.dll(和其他)與.exe文件位於相同的目錄中。但不知何故,它不需要qwindows.dll在「平臺」子文件夾中。我沒有在系統變量或註冊表中發現指向C:/Qt5.0.0/...的任何內容。 –

+0

不知道如何找到DLL。 FWIW:在我的開發箱中,我用QtCreator運行我的程序,沒有任何問題。當QTCreator執行我的應用程序時,它會爲它找到所需的dll(包括QT庫和qminimal.dll等)設置正確的環境。順便說一句,這一切都是自動完成的,我從來不需要設置任何東西。希望這有助於... – Aki

1

看起來,應用程序位於同一目錄下的空的qt.conf在啓動Windows 7上的Qt5應用程序時遇到麻煩。嘗試將其刪除。

2

的Qt平臺的dll位於 「插件」 文件夾中的 「qtbase」: C:\ Qt的\ 5.0.0 \ qtbase \插件\平臺

15

對我來說,單機運行 「Hello World」 的GUI應用程序(Qt sdk 5.0.1 mingw,Win7 x64)。我需要添加下一個文件到程序目錄:

  1. 平臺/ qwindows.dll
  2. D3DCompiler_43.dll
  3. icudt49.dll
  4. icuin49.dll
  5. icuuc49.dll
  6. libEGL。 dll
  7. libgcc_s_sjlj-1.dll
  8. libGLESv2.dll
  9. 的libstdC++ - 6.dll
  10. libwinpthread-1.DLL
  11. Qt5Core.dll
  12. Qt5Gui.dll
  13. Qt5Widgets.dll

qt 5.5 doc

+0

非常感謝這個列表,不幸的是Qt5應用程序並沒有告訴我哪個lib丟失,只是報告了無法理解的錯誤。 –

3
可用窗口全面部署信息

是的,斑點。我使用 qt 5.0.2時遇到了相同的部署問題。

同樣在應用程序 文件夾中安裝了這兩個dll的平臺文件夾,並且vista和win7上的部署現在可以工作。

依賴項walker在這裏沒有幫助,因爲它不會 通知qwindows.dll或qminimal.dll所需的dll。

我Qt安裝中的平臺dll位於 \ Qt \ 5.0.2 \ mingw47_32 \ plugins \ platforms。

2

記事本教程中,Win7上& qt5.1.1

的部署步驟是:

 
* change build mode to release, not debug, 
* build, 
* create a output folder somewhere 
    e.g. desktop/notepad/ 
* 
* copy file to output folder 
    file list: 
    * from "workspace_home/build-notepad-xxx-Release/release" 
     * notepad.exe 
    * from "qt_home/5.1.1/msvc2010/bin" 
     * icudt51.dll 
     * icuin51.dll 
     * icuuc51.dll 
     * libEGL.dll 
     * libGLESv2.dll 
     * Qt5Core.dll 
     * Qt5Gui.dll 
     * Qt5Widgets.dll 
     * 
    * from "qt_home/5.1.1/msvc2010/plugins/platforms" 
     * platforms/ (need to create this sub folder in the output folder) 
      * qwindows.dll 
     * 
    * 
* 
* run the .exe file, make sure it works, 
* 
* ok 
* 
5

更好的選擇是使用:windeployqt.exe。這個工具可以解決你的application.exe的所有依賴關係。

+0

是的,我不知道爲什麼在QT wiki的部署頁面中沒有提到BIG FONT RED! – Kursion

+0

不好意思,但事實並非如此。如果你正在開發一個qml應用程序,它會忽略所有需要的qml文件(QtQml,QtQuick,QtQuick.2) – RvdK

+1

@RvdK'windeployqt'接受'--qmldir '命令行參數來解決QML依賴關係。 (請參閱'windeployqt -help'或http://doc.qt.io/qt-5/windows-deployment.html) –

1

我使用了QMediaPlayer和QMediaPlaylist的一個實例,我的應用程序將不再啓動,給出以下錯誤:此應用程序無法啓動,因爲它無法找到或加載Qt平臺插件「窗口」。重新安裝該應用程序可能會解決此問題。

經過4天的試圖找出發生了什麼,我們發現Qt5Core.dll中有一個加載插件的硬編碼路徑,特別是文件wmfengine.dll。確保你編譯的Qt5Core沒有這個硬編碼路徑(:\ Qt \ 5.5 \ msvc2010)。

screenshot of WinDiff

硬編碼路徑Qt5Core.dll失敗的插件wmfengine.dll加載

+0

使用Windows部署工具(windeployqt)也可以生成一個新的QT5Core.dll,它將刪除硬編碼路徑。它將在您的應用程序目錄中。 –

相關問題