繁体   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