gpt4 book ai didi

c++ - windeployqt 遗漏了一些库并获取了其他不需要的库

转载 作者:可可西里 更新时间:2023-11-01 12:46:41 27 4
gpt4 key购买 nike

通常部署一个 Qt 项目我要么:

  1. 继续运行它并找到它提示缺少的库并添加它们直到没有更多为止。
  2. 使用 dependency walker 让我完成大部分(如果不是全部),然后返回选项 1。
  3. 或者只是创建一个静态链接版本(有时会很痛苦)

所以我现在想尝试 windeployqt,它对我来说存在于 D:\install\Qt\5.5\mingw492_32\bin\

然后我运行它使用:

D:\>D:\install\Qt\5.5\mingw492_32\bin\windeployqt.exe d:\software\build-qtGuiTestApp-Desktop_Qt_5_5_0_MinGW_32bit-Debug\debug

这里是结果输出:

D:\software\build-qtGuiTestApp-Desktop_Qt_5_5_0_MinGW_32bit-Debug\debug\qtGuiTes
tApp.exe 32 bit, debug executable
Adding Qt5Svg for qsvgicond.dll
Skipping plugin qmldbg_qtquick2d.dll due to disabled dependencies.
Skipping plugin qmldbg_tcpd.dll due to disabled dependencies.
Direct dependencies: Qt5Core Qt5Network Qt5WebKitWidgets Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5Multimedia Qt5MultimediaWidgets Qt5Networ
k Qt5OpenGL Qt5Positioning Qt5PrintSupport Qt5Qml Qt5Quick Qt5Sensors Qt5Sql Qt5
WebKit Qt5WebKitWidgets Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5Multimedia Qt5MultimediaWidgets Qt5Networ
k Qt5OpenGL Qt5Positioning Qt5PrintSupport Qt5Qml Qt5Quick Qt5Sensors Qt5Sql Qt5
Svg Qt5WebKit Qt5WebKitWidgets Qt5Widgets
Updating Qt5WebChanneld.dll.
Updating icuin54.dll.
Updating icuuc54.dll.
Updating icudt54.dll.
Updating Qt5Cored.dll.
Updating Qt5Guid.dll.
Updating Qt5Multimediad.dll.
Updating Qt5MultimediaWidgetsd.dll.
Updating Qt5Networkd.dll.
Updating Qt5OpenGLd.dll.
Updating Qt5Positioningd.dll.
Updating Qt5PrintSupportd.dll.
Updating Qt5Qmld.dll.
Updating Qt5Quickd.dll.
Updating Qt5Sensorsd.dll.
Updating Qt5Sqld.dll.
Updating Qt5Svgd.dll.
Updating Qt5WebKitd.dll.
Updating Qt5WebKitWidgetsd.dll.
Updating Qt5Widgetsd.dll.
Updating libGLESV2d.dll.
Updating libEGLd.dll.
Updating D3Dcompiler_47.dll.
Creating directory audio.
Updating qtaudio_windowsd.dll.
Creating directory bearer.
Updating qgenericbearerd.dll.
Updating qnativewifibearerd.dll.
Creating directory iconengines.
Updating qsvgicond.dll.
Creating directory imageformats.
Updating qddsd.dll.
Updating qgifd.dll.
Updating qicnsd.dll.
Updating qicod.dll.
Updating qjp2d.dll.
Updating qjpegd.dll.
Updating qmngd.dll.
Updating qsvgd.dll.
Updating qtgad.dll.
Updating qtiffd.dll.
Updating qwbmpd.dll.
Updating qwebpd.dll.
Creating directory mediaservice.
Updating dsengined.dll.
Updating qtmedia_audioengined.dll.
Creating directory platforms.
Updating qwindowsd.dll.
Creating directory playlistformats.
Updating qtmultimedia_m3ud.dll.
Creating directory position.
Updating qtposition_positionpolld.dll.
Creating directory printsupport.
Updating windowsprintersupportd.dll.
Creating directory sensorgestures.
Updating qtsensorgestures_plugind.dll.
Updating qtsensorgestures_shakeplugind.dll.
Creating directory sensors.
Updating qtsensors_genericd.dll.
Creating directory sqldrivers.
Updating qsqlited.dll.
Updating qsqlmysqld.dll.
Updating qsqlodbcd.dll.
Updating qsqlpsqld.dll.
Creating D:\software\build-qtGuiTestApp-Desktop_Qt_5_5_0_MinGW_32bit-Debug\debug
\translations...
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_de.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...

D:\>

所以看起来不错,因为我的项目虽然非常简单,但使用了:core、gui、network、webkit、webkitwidgets 所以是的,很多 qt 库。

但是,当我运行我的可执行文件时,我收到错误消息,指出它找不到以下库:

  • libgcc_s_dw2-1.dll
  • libstdc++-6.dll
  • libwinpthread-1.dll

我从同一个文件夹 (D:\install\Qt\5.5\mingw492_32\bin\) 手动添加了它们,它工作正常。我的问题是:

  1. 为什么会丢失这些文件?
  2. 我怎样才能让它得到它们?
  3. 1GB 的库对我来说有点过分,所以我四处删除了一些我认为不需要的库,但我的可执行文件仍然运行良好。那么,您如何才能使 windeployqt 更高效并只获取您需要的 DLL?

如果不回答这些问题,我发现这个工具对我来说有点无用,因为我自己可以做得更好....我可能可以编写一些脚本来继续运行它并读取错误并复制相关的 dll :o

编辑

添加了以下文件夹(带有 dll),但它们只有 75mb...公平地说,将近 1GB 是由于我正在使用的 webkit、quick、gui 和其他大型 Qt 库:

mediaservice,
platforms,
playlistformats,
position,
printsupport,
sensorgestures,
sensors,
sqldrivers,
translations,
audio,
iconengines,
imageformats

最佳答案

  1. Why does it miss these files?

这些文件与mingw运行时库有关,它们不属于Qt,这就是windeployqt默认不添加它们的原因。

  1. How can I make it get them?

为了使 windeployqt 将它们添加到部署目录,请尝试将 --compiler-runtime 开关添加到您的命令中。请注意,您应该使用 Qt 在其开始菜单快捷方式中提供的命令提示符,而不是自己定位 windeployqt 路径。

  1. 1GB of libs seemed a bit excessive to me, so I went around and deleted a few that I thought I don't need and my executable still runs fine. So how can you make windeployqt more efficient and just get the DLLs you need?

我认为你在你的项目中依赖了太多的模块,所以包括他们所有的 dll 文件必须很大,但是不确定你排除的 dll 文件以及你的程序如何在没有它们的情况下运行良好。也许您可以命名一些不需要的 dll 文件。当然,只要您不违反许可,您始终可以选择静态构建(这将导致更小、更干净的部署规模)。

关于c++ - windeployqt 遗漏了一些库并获取了其他不需要的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36630830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com