簡體   English   中英

在發布模式下使用QtMultimedia部署Qt應用程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM