在发布模式下使用QtMultimedia部署Qt应用程序

时间:2013-04-23 03:47:21

标签: c++ qt deployment qt5

我正在使用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),
plugins / mediaservice /(所有dll),
插件/播放列表(所有dll)

可能有什么问题?或者我遗失了哪些其他的dll?

3 个答案:

答案 0 :(得分:1)

更新:使用windeployqt.exe!它的效果非常好。

http://doc.qt.io/qt-5/windows-deployment.html#the-windows-deployment-tool

  

使用windeployqt的最简单方法是添加bin目录   你的Qt安装(例如)到PATH变量然后   运行:

windeployqt <path-to-app-binary>

当您在发布模式下运行应用程序时(当它正在运行时,从Qt Creator内部运行),执行depends.exe并将其指向应用程序。

记下从Qt文件夹中引用的所有dll。

如果你想花更多的时间用另一种方式:

您可以通过尝试删除文件来手动解决问题,因为Windows在使用时不会让您删除文件夹或dll。所以你可以去备份你的Qt安装,然后运行你的应用程序,确保它已连接到它将要使用的所有dll,然后尝试删除Qt安装中的文件夹和文件。 Windows不允许您删除发行版正在使用的文件。

如果你想知道,Windows也是如何解析dll的:

http://msdn.microsoft.com/en-us/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 :(从here获取)

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的paths

希望有所帮助。

答案 1 :(得分:0)

操作系统会自动加载列表中包含链接到应用程序的导入库的所有DLL。如果缺少其中任何一个,您将收到一个对话框,告诉您哪个DLL无法加载。唯一看起来可能由应用程序手动加载的是插件。确保告诉QT多媒体系统加载它们。另外,请确保检查multiamedia manager返回的错误代码

鉴于您最近的评论说音频在调试模式下播放但未在发布模式下播放是一个很好的迹象,您已将插件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

答案 2 :(得分:0)

我找到了答案。现在我的申请工作。它可以在运行可执行文件时播放音频文件。

尽管未在depends.exe中列出,但在使用QMediaPlayer时我们应该添加以下dll:

Qt5MultimediaWidgets
Qt5OpenGL

以下是参考:https://bugreports.qt-project.org/browse/QTBUG-30172