Qt项目查找依赖库打包
如果你是用 CMake + Qt(或者其他库)编译好可执行文件,
发布之前需要做两件事:
- 查找程序依赖的动态库(.dll / .so / .dylib)
- 打包到一起(确保在目标机器上能直接运行)
1️⃣ 查找依赖库
Windows
-
工具
-
windeployqt
(Qt 自带)windeployqt myapp.exe
- 自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录
- 适合 Qt 项目
-
dumpbin
(VS 自带)dumpbin /DEPENDENTS myapp.exe
-
Dependencies
(第三方 GUI 工具)
类似Dependency Walker
,可以直观看到依赖树
下载:https://github.com/lucasg/Dependencies
-
Linux
-
工具
-
ldd
ldd myapp
输出:
libQt6Core.so.6 => /usr/lib/libQt6Core.so.6 libstdc++.so.6 => /usr/lib/libstdc++.so.6 ...
-
lddtree
(来自pax-utils
包)
递归查看依赖:lddtree myapp
-
objdump -p
objdump -p myapp | grep NEEDED
-
macOS
-
工具
-
otool -L
otool -L myapp
-
Qt 专用
macdeployqt myapp.app
会自动复制 Qt 库、修正
.app
内的依赖路径
-
2️⃣ 打包发布
Qt 项目
-
Windows
windeployqt myapp.exe
会把所有 Qt DLL、插件、QML 文件放到和 exe 同目录。
-
Linux
-
用 linuxdeployqt:
linuxdeployqt myapp -appimage
甚至可以直接打包成 AppImage
-
或者自己复制依赖
.so
到一个lib/
目录,并修改rpath
:patchelf --set-rpath '$ORIGIN/lib' myapp
-
-
macOS
macdeployqt myapp.app
3️⃣ 发布目录结构示例(Windows)
myapp/├── myapp.exe├── Qt6Core.dll├── Qt6Widgets.dll├── Qt6Gui.dll├── platforms/│ └── qwindows.dll├── styles/│ └── qwindowsvistastyle.dll├── plugins/│ └── imageformats/│ ├── qjpeg.dll│ └── qpng.dll└── ...
💡 经验建议:
- Qt 项目优先用
windeployqt
/macdeployqt
/linuxdeployqt
,省心。 - 非 Qt 项目就用
ldd
/otool
/dumpbin
/Dependencies
先找依赖,然后自己复制过去。 - 如果要发给不装 Qt 的用户,一定要带上 Qt 的 DLL / SO / dylib。
- Windows 发布时,记得检查 MSVC 运行库 是否打包(
vcruntime140.dll
等)。