[英]Qt5 Application Does Not Run
我使用 Qt 5(使用 Visual Studio '12 編譯)創建了一個應用程序。 它適用於我的機器。
但是,當我嘗試在另一台機器上運行它時它不起作用。 我通過 cmd 收集的輸出產生了一個空文件。
目錄結構如下:
我發現的最相關的帖子是使用 QT5 庫部署的應用程序未在 Windows 7 上啟動- 但解決方案(包括 qwindows.dll 和 qminimal.dll)不起作用。
有任何想法嗎?
當您在 Qt Creator 外雙擊您的 exe 時,Windows 將報告一些啟動錯誤。 看起來您已經包含了大部分或全部這些內容。
由於您的 exe 搜索的LibraryPaths
,您的開發機器通常不會在啟動和運行其 qt 插件時遇到問題。 http://qt-project.org/doc/qt-5/qcoreapplication.html#libraryPaths
Dependency Walker將完成這項工作並向您展示您需要知道的內容,但輸出非常復雜且難以破譯。
我發現找出我在 Windows 上運行時使用的 Qt 插件 dll 的最簡單方法是執行以下操作:
退出 Qt Creator。
在資源管理器中打開與 Qt 一起使用的編譯器的安裝文件夾。 例如:
C:/Qt/5.3/msvc2010_opengl/
創建副本plugins
(代替文件夾Copy of plugins
文件夾中的相同路徑plugins
,所以它的母公司是msvc2010_opengl
在這種情況下)。
在另一個資源管理器窗口中,在您的開發機器上打開您的 exe(Qt 程序)。 對您的程序進行最少的測試,以確保主要功能正常工作。 (許多運行時插件在使用它們的 QObject 被實例化之前不會被加載)。
刪除Qt路徑下的plugins
文件夾。
Windows 將鎖定您的 exe 正在使用的所有 dll,並防止您刪除許多 dll。 單擊跳過所有不可刪除的文件夾和文件。
現在進入您以前無法刪除的每個文件夾,並嘗試刪除每個文件夾中的所有單獨的 dll。 單擊跳過所有不可刪除的 dll。
現在,當您完成所有操作后,您將獲得一個插件文件夾的框架,僅顯示您的應用程序正在使用的 dll。
它可能包括以下文件夾: accessibility
、 platforms
和imageformats
,具體取決於您在.pro
文件中包含的內容。
關閉你的exe。
將精簡后的插件文件夾的內容復制到您的 exe 旁邊。
恢復插件文件夾的備份(從 Qt 路徑中刪除精簡的插件文件夾並恢復Copy of plugins
)。
現在你應該可以走了。 在非開發機器上測試。
同樣在某些機器上,當使用 MSVC 部署 Qt 時,msvcrXXX.dll 與系統其余部分使用的不匹配。 我們沒有在辦公室的安裝程序中部署 msvcrXXX.dll,而是包含 Microsoft C++ Redistributable Installer 並在安裝腳本中運行它。 在一些機器上,他們損壞了 Redistributables,我們不得不強制安裝 Redistributables 以修復我們有時會遇到的“來自服務器的推薦”錯誤。
您可以在最新支持的 Visual C++ 下載 中找到 MSVC Redistributables 的最新安裝程序。
希望有幫助。
您必須在手動復制 dll 文件之前部署您的應用程序。
要在 Windows 上部署 Qt 應用程序,您可以使用windeployqt ,它可以在以下位置找到:
<QTDIR>/bin/windeployqt
示例批處理腳本可用於部署 Qt 應用程序(使用 PowerShell 或 cmd 運行):
C:\Qt\Qt5.x.x\5.x.x\MSVCx_x\bin\windeployqt <APP_PATH>/myapp.exe
部署應用程序后,嘗試運行myapp.exe並注意缺少哪些 dll 文件。
將所需的 dll 文件從QTDIR/bin復制/粘貼到您的 <APP_PATH>
有關部署的更多信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.