Qt项目查找依赖库打包

如果你是用CMake + Qt(或者其他库)编译好可执行文件,
发布之前需要做两件事:

  1. 查找程序依赖的动态库(.dll / .so / .dylib)
  2. 打包到一起(确保在目标机器上能直接运行)

1️⃣ 查找依赖库

Windows

  • 工具

    1. windeployqt(Qt 自带)

      windeployqt myapp.exe#或带参数windeployqt--release--qmldirsrc Release\myapp.exe
      • 自动把 Qt 运行时 DLL、插件、QML 模块复制到程序目录
      • 适合 Qt 项目
    2. dumpbin(VS 自带)

      dumpbin /DEPENDENTS myapp.exe
    3. Dependencies(第三方 GUI 工具)
      类似Dependency Walker,可以直观看到依赖树
      下载:https://github.com/lucasg/Dependencies


Linux

  • 工具

    1. ldd

      ldd myapp

      输出:

      libQt6Core.so.6 => /usr/lib/libQt6Core.so.6 libstdc++.so.6 => /usr/lib/libstdc++.so.6 ...
    2. lddtree(来自pax-utils包)
      递归查看依赖:

      lddtree myapp
    3. objdump -p

      objdump-pmyapp|grepNEEDED

macOS

  • 工具

    1. otool -L

      otool-Lmyapp
    2. 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等)。