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