2015-11-19 95 views
0

我正在學習如何使用Qt創建應用程序。我創建了一個在安裝了Qt的機器上運行良好的小應用程序。我想部署使用動態鏈接的Qt庫到Windows。我按照指示發現here和一些其他Stackoverflow文章的幫助下,我能夠讓應用程序運行沒有錯誤,但現在什麼都沒有出現。應該有一個帶有按鈕等的小型UI,但儘管Windows任務管理器顯示應用程序正在運行,但並未顯示它。Qt Windows部署過程

我的第一個想法是我錯過了一些dll文件,但即使我複製了C:\ Qt \ 5.5 \ msvc2013_64 \ bin中找到的每個dll,整個C:\ Qt \ 5.5 \ msvc2013_64 \ plugins目錄, msvcp120.dll,msvcr120.dll和plaforms \ qwindows.dll到應用程序目錄我仍然無法讓它顯示用戶界面。

相同的應用程序可以在任何安裝了Qt的Win x64機器上運行。我只是沒有發現要求用戶下載一套700mb的工具來運行一個9kb的應用程序,這是一個非常強大的解決方案。

我錯過了將Qt部署到Windows的步驟?

對於具體情況,我做了這個open source project.您可以看到bin/Win_x64目錄中構建的應用程序的發佈版本,其中包含所有運行該應用程序所需的.dll文件。如果您將該文件夾複製到未安裝Qt的Win x64機器上,則應該能夠重現我的錯誤。

EDIT1: 我被要求提供在我的生成/ Release目錄中的文件列表:

ArkCharacterSelector.exe 
ArkCharacterSelector.res 
CharacterManager.obj 
Logger.obj 
main.obj 
moc_CharacterManager.cpp 
moc_CharacterManager.obj 
qrc_qml.cpp 
qrc_qml.obj 
+0

主應用程序的DLL必須存在才能運行。缺少DLL時,會出現操作系統級錯誤。請參閱免費工具http://www.dependencywalker.com/以檢查此區域中是否存在缺少的DLL。 –

+0

現在,如果您使用某些功能(如某些文件格式),則需要插件目錄DLL。但我懷疑這不是問題,因爲我希望你的應用程序應該開始顯示並且出現在屏幕上(因爲你沒有說你正在得到一個操作系統級別的錯誤對話框)。 –

+0

下一個問題是你已經建立了64位,你是否試圖部署它在32位窗口?如果他們想要最大限度地消費,大多數人會爲32位窗口創建/構建,因爲它仍然可以在64位窗口上工作。 –

回答

1

下面是從master/bin/Win_x64缺少文件:

bin/Win_x64 
├── QtQuick (both dirs are from qt_base_dir/qml/QtQuick) 
│ ├── Controls 
│ └── Window.2 
├── QtQuick.2 (both files are from qt_base_dir/qml/QtQuick.2) 
│ ├── qmldir 
│ └── qtquick2plugin.dll 
│ 
│ (Those are only needed for QtWebKit builds) 
├── icudt53.dll 
├── icuin53.dll 
└── icuuc53.dll 

而且這些文件可以刪除:

bin/Win_x64 
└── platform 
    ├── qwindowsd.dll (debug dll) 
    └── qwindowsd.pdb (only needed for debugging the debug dll) 

快樂部署!

+0

非常感謝。你怎麼知道這樣做?在閱讀你的解決方案後,我發現最終導致這個解決方案的指令在https://wiki.qt.io/Deploy_an_Application_on_Windows,但它似乎是一個「刪除文件x並查看它是否仍然有效」的艱苦過程。這是你做的嗎? – user1697999

+0

在Windows上進行了很多Qt部署之後,我已經熟悉了主要Qt模塊的二進制依賴關係。 該維基頁面的方法是萬無一失的,但有點乏味。查看'windeployqt.exe'(https://doc.qt.io/qt-5/windows-deployment.html)。它會自動查找並複製所有必需的二進制文件。 – ens