如果你是用CMake Qt或者其他库编译好可执行文件发布之前需要做两件事查找程序依赖的动态库.dll / .so / .dylib打包到一起确保在目标机器上能直接运行1️⃣ 查找依赖库Windows工具windeployqtQt 自带windeployqt myapp.exe#或带参数windeployqt--release--qmldirsrc Release\myapp.exe自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录适合 Qt 项目dumpbinVS 自带dumpbin /DEPENDENTS myapp.exeDependencies第三方 GUI 工具类似Dependency Walker可以直观看到依赖树下载https://github.com/lucasg/DependenciesLinux工具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|grepNEEDEDmacOS工具otool -Lotool-LmyappQt 专用macdeployqt myapp.app会自动复制 Qt 库、修正.app内的依赖路径2️⃣ 打包发布Qt 项目Windowswindeployqt myapp.exe会把所有 Qt DLL、插件、QML 文件放到和 exe 同目录。Linux用linuxdeployqtlinuxdeployqt myapp-appimage甚至可以直接打包成 AppImage或者自己复制依赖.so到一个lib/目录并修改rpathpatchelf --set-rpath$ORIGIN/libmyappmacOSmacdeployqt myapp.app3️⃣ 发布目录结构示例Windowsmyapp/ ├── 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等。
Qt项目查找依赖库打包
如果你是用CMake Qt或者其他库编译好可执行文件发布之前需要做两件事查找程序依赖的动态库.dll / .so / .dylib打包到一起确保在目标机器上能直接运行1️⃣ 查找依赖库Windows工具windeployqtQt 自带windeployqt myapp.exe#或带参数windeployqt--release--qmldirsrc Release\myapp.exe自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录适合 Qt 项目dumpbinVS 自带dumpbin /DEPENDENTS myapp.exeDependencies第三方 GUI 工具类似Dependency Walker可以直观看到依赖树下载https://github.com/lucasg/DependenciesLinux工具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|grepNEEDEDmacOS工具otool -Lotool-LmyappQt 专用macdeployqt myapp.app会自动复制 Qt 库、修正.app内的依赖路径2️⃣ 打包发布Qt 项目Windowswindeployqt myapp.exe会把所有 Qt DLL、插件、QML 文件放到和 exe 同目录。Linux用linuxdeployqtlinuxdeployqt myapp-appimage甚至可以直接打包成 AppImage或者自己复制依赖.so到一个lib/目录并修改rpathpatchelf --set-rpath$ORIGIN/libmyappmacOSmacdeployqt myapp.app3️⃣ 发布目录结构示例Windowsmyapp/ ├── 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等。