如果你是用CMake + Qt(或者其他库)编译好可执行文件,
发布之前需要做两件事:
- 查找程序依赖的动态库(.dll / .so / .dylib)
- 打包到一起(确保在目标机器上能直接运行)
1️⃣ 查找依赖库
Windows
工具
windeployqt(Qt 自带)windeployqt myapp.exe#或带参数windeployqt--release--qmldirsrc Release\myapp.exe- 自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录
- 适合 Qt 项目
dumpbin(VS 自带)dumpbin /DEPENDENTS myapp.exeDependencies(第三方 GUI 工具)
类似Dependency Walker,可以直观看到依赖树
下载:https://github.com/lucasg/Dependencies
Linux
工具
lddldd myapp输出:
libQt6Core.so.6 => /usr/lib/libQt6Core.so.6 libstdc++.so.6 => /usr/lib/libstdc++.so.6 ...lddtree(来自pax-utils包)
递归查看依赖:lddtree myappobjdump -pobjdump-pmyapp|grepNEEDED
macOS
工具
otool -Lotool-LmyappQt 专用
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等)。