我在发布模式下构建了我的Qt项目,并拥有.exe文件。我正在使用Qt 5.7 32-bit for Desktop (MSVC 2015)命令并运行C:\Qt\5.7\msvc2015\bin\windeployqt.exe my_app.exe
但是,在运行它时,windeployqt并没有找到所有的依赖项。我得到了这个输出。
Adding Qt5Svg for qsvgicon.dll
Direct dependencies: Qt5Core Qt5Gui Qt5Widgets
All dependencies : Qt5Core Qt5Gui Qt5Widgets
To be deployed : Qt5Core Qt5Gui Qt5Svg Qt5Widgets当我尝试运行.exe文件时,仍然缺少Qt5Network.dll、Qt5xml.dll、Qt5XmlPatterns.dll、Qt5WebEngineWidgets.dll、Qt5WebEngineCore.dll和Qt5Quick.dll。它还缺少libeay32.dll和ssleay32.dll。
在我的.pro文件中有QT += core gui xml xmlpatterns widgets webenginewidgets network
我一直在寻找这个问题的解决方案,尽管我可以手动复制粘贴它们,它也可以工作,或者使用-network -xml等添加它们,但我想看看是否有一种方法可以将所有依赖项添加到一起。
发布于 2017-02-17 03:07:03
前言
我认为windeployqt目前不会尝试部署libeay32.dll和ssleay32.dll,因为它们不在c:\Qt\5.8\mingw53_32\bin\中(然而,它们在c:\Qt\Tools\mingw530_32\opt\bin\中)
如果windeployqt工作正常,那么windeployqt ./将部署所有没有参数的Qt all。
不幸的是,windeployqt仍然是错误的,因为有时它不创建所需的,而创建无用的。
因此,您可以添加必需的(例如--core)和跳过创建的无用(例如--no-svg):
windeployqt --compiler-runtime --core --gui --network --widgets --winextras --no-svg --no-system-d3d-compiler --no-translations --no-opengl-sw --no-angle ./
更多package_name和命令- https://doc.qt.io/qt-5/windows-deployment.html。
回答
您可以创建变量QT的qmake解析器,将--添加到包名称中,并插入到windeployqt命令中:
DESTDIR = "path/to/dest"
QT = core gui network widgets winextras
CONFIG( release, debug|release ) {
PACKAGES = ""
for(package,QT){
PACKAGES += "--$${package} "
}
NO_PACKAGES = --no-svg \
--no-system-d3d-compiler --no-translations --no-opengl-sw --no-angle
RETURN = $$escape_expand(\n\t)
# windeployqt
QMAKE_POST_LINK += $$RETURN windeployqt --compiler-runtime \
$${PACKAGES} $${NO_PACKAGES} \
$$quote($$shell_path($$DESTDIR))
# copy OpenSSL dlls
OPENSSLFILES = $$shell_path($$PWD/../../bin_openssl_1.0.2h/*.dll)
DDIR = $$shell_path($$DESTDIR)
QMAKE_POST_LINK += $$RETURN $$QMAKE_COPY $$quote($$OPENSSLFILES) $$quote($$DDIR)
}https://stackoverflow.com/questions/41579958
复制相似问题