0

我正在使用 mingw47 开发一个 Qt 5.0 桌面应用程序。我在这个应用程序中使用 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?

4

3 回答 3

2

更新:使用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/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:(取自这里

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的路径。

希望有帮助。

于 2013-04-23T05:25:17.690 回答
0

列表中所有将导入库链接到应用程序的 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
于 2013-04-23T03:53:22.493 回答
0

我找到了答案。现在我的应用程序有效。它可以在运行可执行文件时播放音频文件。

虽然在depends.exe中没有列出,但我们在使用QMediaPlayer时应该添加以下dll:

Qt5MultimediaWidgets
Qt5OpenGL

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

于 2013-04-24T03:42:00.050 回答