[英]Deploying Qt application using QtMultimedia in release mode
我正在使用mingw47開發Qt 5.0 dekstop應用程序。 我在此應用程序中使用QtMultimedia錄制和播放音頻。 我已經對其進行調試測試,並且可以正常工作。 當我嘗試構建它以發布並運行可執行文件時,我無法播放通常可以在調試模式下播放的音頻文件。 在運行可執行文件之前,我已經添加了以下dll:
D3D_Compiler_43.dll,
icudt49.dll,
icuin49.dll,
icuuc49.dll,
libEGL.dll,
libgcc_s_sjlj-1.dll,
libGLESv2.dll,
liblibmpeg2_plugin.dll,
libstdc ++-6.dll,
libwinpthread-1.dll,
Qt5Core.dll,
Qt5Gui.dll,
Qt5Multimedia.dll,
Qt5Network.dll,
Qt5Widgets.dll,
Qt5Xml.dll,
插件/平台/(所有dll),
插件/媒體服務/(所有dll),
插件/播放列表格式(所有dll)
可能是什么問題? 或者我還缺少其他哪些dll?
更新:使用windeployqt.exe
! 它真的很好。
http://doc.qt.io/qt-5/windows-deployment.html#the-windows-deployment-tool
使用windeployqt的最簡單方法是將Qt安裝的bin目錄(例如)添加到PATH變量,然后運行:
windeployqt <path-to-app-binary>
在發布模式下運行應用程序時(運行時,可從Qt Creator內部運行),執行depends.exe並將其指向應用程序。
記下Qt文件夾中引用的所有dll。
如果您想花更多時間,可以用另一種方法:
您可以嘗試刪除文件來手動找出原因,因為Windows不允許您在使用中刪除文件夾或dll。 因此,您可以備份Qt安裝,然后運行您的應用程序,確保它已連接到將要使用的所有dll,然后嘗試刪除Qt安裝中的文件夾和文件。 Windows不允許您刪除發行版中正在使用的文件。
如果您想知道Windows也是如何解析dll的:
http://msdn.microsoft.com/zh-CN/library/7d83bc18(v=vs.80).aspx
編輯:另外,您無需在exe目錄中創建名為plugins的文件夾。 應該是這樣的:
Qt 4.x:
./myexe.exe
./QtCore.dll
./imageformats/qjpegd4.dll // Note: there isn't a "plugins" folder here
Qt 5.x :(從此處獲取 )
The executable ./plugandpaint.exe
The Basic Tools plugin ./plugins/pnp_basictools.dll
The ExtraFilters plugin ./plugins/pnp_extrafilters.dll
The Qt Windows platform plugin ./platforms/qwindows.dll
The Qt Core module ./Qt5Core.dll
The Qt GUI module ./Qt5Gui.dll
The Qt Widgets module ./Qt5Widgets.dll
還運行qDebug() << QApplication::libraryPaths()
,並記下在計算機上搜索dll的路徑 。
希望能有所幫助。
操作系統中會自動加載列表中所有具有與應用程序鏈接的導入庫的DLL。 如果缺少任何一個,您將看到一個對話框,告訴您未能加載哪個DLL。 看起來可能由應用程序手動加載的唯一插件是插件 。 確保您告訴QT多媒體系統加載它們。 另外,請確保您檢查了多媒體管理器返回的錯誤代碼 。
考慮到您最近的評論,即音頻是在調試模式下播放,而不是在發布模式下播放,這很好地表明了您將插件DLL放置在錯誤的位置。 從資源管理器或命令行啟動應用程序時, plugins
目錄必須與應用程序位於同一目錄中。 您的目錄結構應如下所示
c:\stackoverflow\myprogram.exe
c:\stackoverflow\plugins\platforms\(all dlls)
c:\stackoverflow\plugins\mediaservice\(all dlls)
c:\stackoverflow\plugins\playlistformats\(all dlls)
c:\stackoverflow\D3D_Compiler_43.dll
c:\stackoverflow\icudt49.dll
... other dll's here...
c:\stackoverflow\Qt5Network.dll
c:\stackoverflow\Qt5Widgets.dll
c:\stackoverflow\Qt5Xml.dll
我找到了答案。 現在我的應用程序可以工作了。 運行可執行文件時,它可以播放音頻文件。
盡管未在depends.exe中列出,但使用QMediaPlayer時,我們應添加以下dll:
Qt5MultimediaWidgets
Qt5OpenGL
這是參考: https : //bugreports.qt-project.org/browse/QTBUG-30172
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.